System.IO.FileStream, klasa
Ten artykuł zawiera dodatkowe uwagi dotyczące dokumentacji referencyjnej dla tego interfejsu API.
FileStream Użyj klasy , aby odczytywać, zapisywać, otwierać i zamykać pliki w systemie plików oraz manipulować innymi uchwytami systemu operacyjnego powiązanymi z plikami, w tym potokami, standardowymi danymi wejściowymi i standardowymi danymi wyjściowymi. Za pomocą Readmetod , Write, CopyToi Flush można wykonywać operacje synchroniczne lub ReadAsyncmetody , WriteAsync, CopyToAsynci FlushAsync do wykonywania operacji asynchronicznych. Użyj metod asynchronicznych, aby wykonywać operacje na plikach intensywnie korzystających z zasobów bez blokowania głównego wątku. Ta kwestia wydajności jest szczególnie ważna w aplikacji ze Sklepu Windows 8.x lub aplikacji klasycznej, w której czasochłonna operacja strumienia może zablokować wątek interfejsu użytkownika i sprawić, że aplikacja będzie wyświetlana tak, jakby nie działała. FileStream buforuje dane wejściowe i wyjściowe w celu uzyskania lepszej wydajności.
Ważne
Ten typ implementuje IDisposable interfejs. Po zakończeniu korzystania z typu należy usunąć go bezpośrednio lub pośrednio. Aby usunąć typ bezpośrednio, wywołaj metodę Disposetry
/catch
w bloku. Aby usunąć go pośrednio, należy użyć konstrukcji języka, takiej jak using
(w języku C#) lub Using
(w Visual Basic). Aby uzyskać więcej informacji, zobacz sekcję "Using an Object that Implements IDisposable" (Używanie obiektu implementujące interfejs IDisposable) w temacie interfejsu IDisposable .
Właściwość IsAsync wykrywa, czy uchwyt pliku został otwarty asynchronicznie. Tę wartość należy określić podczas tworzenia wystąpienia FileStream klasy przy użyciu konstruktora, który ma isAsync
parametr , useAsync
lub options
. Gdy właściwość to true
, strumień wykorzystuje nakładające się operacje we/wy w celu asynchronicznego wykonywania operacji na plikach. Jednak IsAsync właściwość nie musi być true
wywoływana metody ReadAsync, WriteAsynclub CopyToAsync . IsAsync Gdy właściwość jest false
i wywołujesz asynchroniczne operacje odczytu i zapisu, wątek interfejsu użytkownika nadal nie jest blokowany, ale rzeczywista operacja we/wy jest wykonywana synchronicznie.
Metoda Seek obsługuje losowy dostęp do plików. Seek umożliwia przeniesienie pozycji odczytu/zapisu do dowolnej pozycji w pliku. Odbywa się to za pomocą parametrów punktu odniesienia przesunięcia bajtowego. Przesunięcie bajtu jest względne względem punktu odniesienia wyszukiwania, który może być początkiem, bieżącą pozycją lub końcem pliku bazowego, reprezentowanym przez trzy elementy członkowskie SeekOrigin wyliczenia.
Uwaga
Pliki dysków zawsze obsługują dostęp losowy. W czasie budowy CanSeek wartość właściwości jest ustawiona na true
lub false
w zależności od bazowego typu pliku. Jeśli podstawowy typ pliku jest FILE_TYPE_DISK, zgodnie z definicją w pliku winbase.h, CanSeek wartość właściwości to true
. CanSeek W przeciwnym razie wartość właściwości to false
.
Jeśli proces kończy się częścią pliku zablokowanego lub zamyka plik, który ma zaległe blokady, zachowanie jest niezdefiniowane.
Aby uzyskać informacje o operacjach katalogu i innych operacjach na plikach, zobacz Fileklasy , Directoryi Path . Klasa File jest klasą narzędziową, która ma metody statyczne głównie do tworzenia FileStream obiektów na podstawie ścieżek plików. Klasa MemoryStream tworzy strumień z tablicy bajtów i jest podobny do FileStream klasy.
Aby uzyskać listę typowych operacji dotyczących plików i katalogów, zobacz Typowe zadania we/wy.
Wykrywanie zmian położenia strumienia
FileStream Jeśli obiekt nie ma wyłącznego uchwytu, inny wątek może jednocześnie uzyskać dostęp do uchwytu pliku i zmienić położenie wskaźnika plików systemu operacyjnego skojarzonego z uchwytem pliku. W takim przypadku może zostać naruszona pozycja buforowana w FileStream obiekcie i buforowane dane w buforze. Obiekt FileStream rutynowo przeprowadza kontrole metod, które uzyskują dostęp do buforowanego buforu, aby upewnić się, że pozycja uchwytu systemu operacyjnego jest taka sama jak pozycja buforowana używana przez FileStream obiekt.
Jeśli w wywołaniu Read metody zostanie wykryta nieoczekiwana zmiana pozycji dojścia, platforma .NET odrzuci zawartość buforu i ponownie odczytuje strumień z pliku. Może to mieć wpływ na wydajność, w zależności od rozmiaru pliku i innych procesów, które mogą mieć wpływ na położenie strumienia plików.
Jeśli w wywołaniu Write metody zostanie wykryta nieoczekiwana zmiana położenia uchwytu, zawartość buforu zostanie odrzucona i IOException zostanie zgłoszony wyjątek.
FileStream Obiekt nie będzie miał wyłącznego uchwytu, gdy SafeFileHandle dostęp do właściwości jest dostępny w celu uwidocznienia uchwytu lub FileStream obiekt otrzymuje SafeFileHandle właściwość w konstruktorze.