Udostępnij przez


Wejście/wyjście plików i strumieni

Operacje wejścia/wyjścia (I/O) dla plików i strumieni odnoszą się do transferu danych do lub z nośnika danych. Na platformie .NET System.IO przestrzenie nazw zawierają typy, które umożliwiają odczytywanie i zapisywanie zarówno synchronicznie, jak i asynchronicznie, na strumieniach danych i plikach. Te przestrzenie nazw zawierają również typy, które wykonują kompresję i dekompresację plików oraz typy, które umożliwiają komunikację za pośrednictwem potoków i portów seryjnych.

Plik jest uporządkowaną i nazwaną kolekcją bajtów, która ma pamięć trwałą. Podczas pracy z plikami pracujesz ze ścieżkami katalogów, magazynem dysków oraz nazwami plików i katalogów. Z kolei strumień jest sekwencją bajtów, których można użyć do odczytu i zapisu w pamięci pomocniczej, która może być jednym z kilku nośników danych (na przykład dysków lub pamięci). Podobnie jak istnieje kilka rodzajów magazynów danych poza dyskami, istnieje też kilka rodzajów strumieni poza strumieniami plików, takich jak strumienie sieciowe, pamięci i potokowe.

Pliki i katalogi

Typy w System.IO przestrzeni nazw można używać do interakcji z plikami i katalogami. Można na przykład pobierać i ustawiać właściwości plików i katalogów oraz pobierać kolekcje plików i katalogów na podstawie kryteriów wyszukiwania.

Aby uzyskać konwencje nazewnictwa ścieżek i sposoby wyrażania ścieżki pliku dla systemów Windows, w tym ze składnią urządzenia DOS obsługiwaną w programach .NET Core 1.1 i nowszych oraz .NET Framework 4.6.2 i nowszych, zobacz Formaty ścieżek plików w systemach Windows.

Poniżej przedstawiono niektóre często używane klasy plików i katalogów:

  • File — udostępnia metody statyczne tworzenia, kopiowania, usuwania, przenoszenia i otwierania FileStream plików oraz ułatwia tworzenie obiektu.

  • FileInfo — udostępnia metody tworzenia, kopiowania, usuwania, przenoszenia i otwierania FileStream plików oraz ułatwia tworzenie obiektu.

  • Directory — udostępnia metody statyczne do tworzenia, przenoszenia i wyliczania za pomocą katalogów i podkatalogów.

  • DirectoryInfo — udostępnia metody wystąpień do tworzenia, przenoszenia i wyliczania katalogów i podkatalogów.

  • Path — udostępnia metody i właściwości przetwarzania ciągów katalogu w sposób międzyplatformowy.

Zawsze należy zapewnić niezawodną obsługę wyjątków podczas wywoływania metod systemu plików. Aby uzyskać więcej informacji, zobacz Obsługa błędów I/O.

Oprócz używania tych klas użytkownicy programu Visual Basic mogą używać metod i właściwości udostępnianych przez klasę Microsoft.VisualBasic.FileIO.FileSystem dla operacji we/wy pliku.

Zobacz Instrukcje: kopiowanie katalogów, Instrukcje: tworzenie listy katalogówi Instrukcje: wyliczanie katalogów i plików.

Strumienie

Abstrakcyjna klasa Stream bazowa obsługuje odczytywanie i zapisywanie bajtów. Wszystkie klasy reprezentujące strumienie dziedziczą z Stream klasy. Klasa Stream i jej klasy pochodne zapewniają wspólny widok źródeł danych i repozytoriów oraz izolować programistę od konkretnych szczegółów systemu operacyjnego i urządzeń bazowych.

Strumienie obejmują trzy podstawowe operacje:

  • Odczyt — transferowanie danych ze strumienia do struktury danych, takiej jak tablica bajtów.

  • Pisanie — przesyłanie danych do strumienia ze źródła danych.

  • Wyszukiwanie — wykonywanie zapytań i modyfikowanie bieżącego położenia w strumieniu.

W zależności od bazowego źródła danych lub repozytorium strumień może obsługiwać tylko niektóre z tych możliwości. Na przykład PipeStream klasa nie obsługuje wyszukiwania. Właściwości CanRead, CanWritei CanSeek strumienia określają operacje obsługiwane przez strumień.

Poniżej przedstawiono niektóre często używane klasy strumieni.

  • FileStream — do odczytywania i zapisywania w pliku.

  • IsolatedStorageFileStream — do odczytu i zapisu pliku w izolowanym magazynie.

  • MemoryStream — do odczytu i zapisu w pamięci jako magazynu zapasowego.

  • BufferedStream — w celu poprawy wydajności operacji odczytu i zapisu.

  • NetworkStream – do odczytywania i zapisywania za pośrednictwem gniazd sieciowych.

  • PipeStream – do odczytywania i pisania za pośrednictwem anonimowych i nazwanych potoków.

  • CryptoStream — do łączenia strumieni danych z przekształceniami kryptograficznymi.

Aby zapoznać się z przykładem pracy ze strumieniami asynchronicznie, zobacz Asynchronous File I/O.

Czytelnicy i autorzy

System.IO Przestrzeń nazw udostępnia również typy do odczytywania zakodowanych znaków ze strumieni oraz zapisywania ich do strumieni. Zazwyczaj strumienie są przeznaczone do bajtowych danych wejściowych i wyjściowych. Typy czytników i składników zapisywania obsługują konwersję zakodowanych znaków na i z bajtów, aby strumień mógł ukończyć operację. Każda klasa czytelnika i składnika zapisywania jest skojarzona ze strumieniem, który można pobrać za pomocą właściwości klasy BaseStream .

Poniżej przedstawiono niektóre często używane klasy czytników i zapisujące.

  • BinaryReader i BinaryWriter — do odczytywania i zapisywania pierwotnych typów danych jako wartości binarnych.

  • StreamReader i StreamWriter — do odczytywania i zapisywania znaków przy użyciu wartości kodowania, aby przekonwertować znaki na i z bajtów.

  • StringReader i StringWriter — do odczytywania i pisania znaków do i z ciągów znaków.

  • TextReader i TextWriter — służy jako abstrakcyjne klasy bazowe dla innych czytelników i pisarzy, które odczytują i zapisują znaki i ciągi, ale nie dane binarne.

Zobacz Instrukcje: odczytywanie tekstu z pliku, Instrukcje: zapisywanie tekstu w pliku, Instrukcje: odczytywanie znaków z ciągu i Instrukcje: zapisywanie znaków w ciągu.

Asynchroniczne operacje wejścia/wyjścia

Odczytywanie lub zapisywanie dużej ilości danych może być intensywnie obciążające zasoby. Te zadania należy wykonać asynchronicznie, jeśli aplikacja musi odpowiadać użytkownikowi. W przypadku synchronicznych operacji we/wy wątek interfejsu użytkownika jest blokowany do momentu zakończenia operacji intensywnie korzystającej z zasobów. Użyj asynchronicznych operacji we/wy podczas tworzenia aplikacji ze Sklepu Windows 8.x, aby zapobiec tworzeniu wrażenia, że aplikacja przestała działać.

Asynchroniczne elementy członkowskie zawierają Async w swoich nazwach, takie jak metody CopyToAsync, FlushAsync, ReadAsync i WriteAsync. Używasz tych metod ze słowami kluczowymi async i await.

Aby uzyskać więcej informacji, zobacz Asynchroniczne operacje we/wy plików.

Kompresja

Kompresja odnosi się do procesu zmniejszania rozmiaru pliku w celu przechowywania. Dekompresja to proces wyodrębniania zawartości skompresowanego pliku, aby był w formacie użytecznym. System.IO.Compression Przestrzeń nazw zawiera typy kompresowania i dekompresowania plików i strumieni.

Podczas kompresowania i dekompresowania plików i strumieni są często używane następujące klasy:

  • ZipArchive — do tworzenia i pobierania wpisów w archiwum zip.

  • ZipArchiveEntry — do reprezentowania skompresowanego pliku.

  • ZipFile — do tworzenia, wyodrębniania i otwierania skompresowanego pakietu.

  • ZipFileExtensions — do tworzenia i wyodrębniania wpisów w skompresowanym pakiecie.

  • DeflateStream — do kompresowania i dekompresowania strumieni przy użyciu algorytmu Deflate.

  • GZipStream — do kompresowania i dekompresowania strumieni w formacie danych gzip.

Zobacz Instrukcje: kompresowanie i wyodrębnianie plików.

Odizolowana pamięć masowa

Izolowany magazyn to mechanizm przechowywania danych, który zapewnia izolację i bezpieczeństwo przez zdefiniowanie ustandaryzowanych sposobów kojarzenia kodu z zapisanymi danymi. Magazyn udostępnia wirtualny system plików, który jest izolowany przez użytkownika, zestaw i (opcjonalnie) domenę. Izolowany magazyn jest szczególnie przydatny, gdy aplikacja nie ma uprawnień dostępu do plików użytkowników. Ustawienia lub pliki aplikacji można zapisywać w sposób kontrolowany przez zasady zabezpieczeń komputera.

Izolowany magazyn nie jest dostępny dla aplikacji ze Sklepu Windows 8.x; zamiast tego należy korzystać z klas danych aplikacji w Windows.Storage przestrzeni nazw. Aby uzyskać więcej informacji, zobacz Dane aplikacji.

Podczas implementowania izolowanego magazynu często są używane następujące klasy:

Zobacz izolowany magazyn.

Operacje wejścia/wyjścia w aplikacjach ze Sklepu Windows

Platforma .NET dla aplikacji ze Sklepu Windows 8.x zawiera wiele typów do odczytu i zapisu strumieni; jednak ten zestaw nie zawiera wszystkich typów wejścia/wyjścia (I/O) .NET.

Niektóre ważne różnice, które należy zauważyć podczas korzystania z operacji we/wy w aplikacjach ze Sklepu Windows 8.x:

W razie potrzeby można konwertować strumienie programu .NET Framework i strumienie środowiska uruchomieniowego systemu Windows. Aby uzyskać więcej informacji, zobacz How to: Convert Between .NET Framework Streams and Windows Runtime Streams lub WindowsRuntimeStreamExtensions.

Aby uzyskać więcej informacji na temat operacji we/wy w aplikacji ze Sklepu Windows 8.x, zobacz Szybki start: odczytywanie i zapisywanie plików.

Wejście/Wyjście i zabezpieczenia

W przypadku używania klas w System.IO przestrzeni nazw należy przestrzegać wymagań dotyczących zabezpieczeń systemu operacyjnego, takich jak listy kontroli dostępu (ACL), aby kontrolować dostęp do plików i katalogów. To wymaganie jest dodatkiem do wszelkich FileIOPermission wymagań. Listami ACL można zarządzać programowo. Aby uzyskać więcej informacji, zobacz How to: Add or Remove Access Control List Entries (Instrukcje: dodawanie lub usuwanie wpisów listy kontroli dostępu).

Domyślne zasady zabezpieczeń uniemożliwiają aplikacjom internetowym lub intranetowym uzyskiwanie dostępu do plików na komputerze użytkownika. W związku z tym nie należy używać klas we/wy, które wymagają ścieżki do pliku fizycznego podczas pisania kodu, który zostanie pobrany za pośrednictwem Internetu lub intranetu. Zamiast tego użyj izolowanego magazynu dla aplikacji platformy .NET.

Sprawdzanie zabezpieczeń jest wykonywane tylko wtedy, gdy strumień zostaje utworzony. W związku z tym nie otwieraj strumienia, a następnie przekazuj go do mniej zaufanego kodu lub domen aplikacji.

  • Typowe zadania we/wy
    Zawiera listę zadań we/wy skojarzonych z plikami, katalogami i strumieniami oraz linki do odpowiedniej zawartości i przykładów dla każdego zadania.

  • Asynchroniczne wejścia/wyjścia plików
    Opisuje zalety wydajności i podstawowe działanie asynchronicznego I/O.

  • Izolowany magazyn
    Opisuje mechanizm przechowywania danych, który zapewnia izolację i bezpieczeństwo, definiując ustandaryzowane sposoby kojarzenia kodu z zapisanymi danymi.

  • Potoki
    Opisuje działania związane z anonimowymi i nazwanymi potokami w .NET.

  • Memory-Mapped Pliki
    Opisuje pliki mapowane w pamięci, które zawierają zawartość plików na dysku w pamięci wirtualnej. Za pomocą plików mapowanych w pamięci można edytować bardzo duże pliki i tworzyć pamięć współdzieloną na potrzeby komunikacji międzyprocesowej.