Udostępnij za pośrednictwem


          

Dostęp do danych i plików w aplikacjach Modern UI - Odczyt i zapis pliku  Udostępnij na: Facebook

Tłumaczenie na podstawie Quickstart: Reading and writing a file (Modern UI style apps using C#/VB/C++ and XAML): Konrad Bojarczuk

Opublikowano: 2012-07-19

Wymagania:

  • musisz rozumieć asynchroniczne programowanie aplikacji Modern UI w C# i Visual Basic – jeśli chcesz nauczyć się pisać asynchroniczne aplikacje, zobacz Quickstart: Using the await operator for asynchronous programming,
  • wiedza na temat tego, w jaki sposób należy uzyskać plik, z którego będziesz później dokonywał odczytu i zapisu – możesz nauczyć się, w jaki sposób pobrać plik przez przeglądarkę plików w odcinku Dostęp do plików przy użyciu przeglądarki.

 

Plik używany w przykładach

Cały kod, przedstawiony w poniższych przykładach, pochodzi z File Access sample i zależy od zmiennej sampleFile. Ta zmienna reprezentuje plik (sample.txt), który zostaje zapisany, a z którego następuje odczyt.

W przykładzie pliku, jest tworzony sample.txt, przechowujący obiekt StorageFile, który jest zwracany:


C#

StorageFolder storageFolder = KnownFolders.DocumentsLibrary;
StorageFile sampleFile = await storageFolder.CreateFileAsync("sample.txt");

VB

Dim storageFolder As StorageFolder = KnownFolders.DocumentsLibrary
Dim sampleFile As StorageFile = Await storageFolder.CreateFileAsync("sample.txt")

Uwaga! Aby możliwe było tworzenie plików w bibliotece dokumentów musisz zadeklarować niezbędne uprawnienia w kodzie swojej aplikacji. Możesz dowiesz się więcej na ten temat w App capability declarations.

 

Uwaga! Pamiętaj, aby umieścić słowo async wdeklaracji każdej metody, która używa operatora await. Jeśli chcesz wiedzieć na ten temat więcej, zobacz Quickstart: Using the await operator for asynchronous programming.

 

Zapis do pliku

Poniższe kroki umożliwiają zapis do pliku, jeśli posiadasz plik z uprawnieniami zapisu i StorageFile, który go reprezentuje.

 

Zapisywanie tekstu do pliku

Tekst do pliku możemy zapisać, wywołując metodę WriteTextAsync z klasy FileIO.


W przykładzie File Access sample pokazano, jak wywołać WriteTextAsync (file, contents), aby wpisać dowolny tekst do sampleFile, tak jak przedstawiono to poniżej:

 

C#

await Windows.Storage.FileIO.WriteTextAsync(sampleFile, "Swift as a shadow");

VB

Await Windows.Storage.FileIO.WriteTextAsync(sampleFile, "Swift as a shadow")

Uwaga! Pamiętaj, aby umieścić słowo async wdeklaracji każdej metody, która używa operatora await. Jeśli chcesz dowiedzieć się więcej na ten temat, zobacz Quickstart: Using the await operator for asynchronous programming.

 

Zapisywanie informacji do pliku za pomocą bufora

  1. Pobierz bufor bajtów, który chcesz zapisać do pliku. W przykładzie File Access sample pokazano, jak uzyskać bufor bajtów za pomocą wywołania ConvertStringToBinary, bazując na dowolnym ciągu znaków (zmiennej string), tak jak przedstawiono to w przykładzie poniżej:

C#

var buffer = Windows.Security.Cryptography.CryptographicBuffer.ConvertStringToBinary(    "What fools these mortals be", Windows.Security.Cryptography.BinaryStringEncoding.Utf8);

VB

Dim buffer = Windows.Security.Cryptography.CryptographicBuffer.ConvertStringToBinary("What fools these mortals be",Windows.Security.Cryptography.BinaryStringEncoding.Utf8)
  1. Przepisz informacje z bufora do pliku, wywołując metodę WriteBufferAsync z klasy FileIO. W przykładzie File Access samplepokazano, jak należy używać WriteBufferAsync do zapisu binarnych informacji z buforu do sampleFile, tak jak przedstawiono to w przykładzie poniżej:

C#

await Windows.Storage.FileIO.WriteBufferAsync(sampleFile, buffer);

VB

Await Windows.Storage.FileIO.WriteBufferAsync(sampleFile, buffer)

Uwaga! Pamiętaj, aby umieścić słowo async wdeklaracji każdej metody, która używa operatora await. Jeśli chcesz dowiedzieć się więcej na ten temat, zobacz Quickstart: Using the await operator for asynchronous programming.

 

Zapis tekstu do pliku za pomocą strumienia

  1. Otwórz strumień pliku, wywołując metodę StorageFile.OpenAsync. Metoda zwraca strumień zawartości pliku, gdy zostanie zakończona procedura uruchamiania.

W przykładzieFile Access sample pokazano, w jaki sposób otworzyć strumień dla danego pliku (samplefile) poprzez wywołanie metody StorageFile.OpenAsync w następujący sposób:

C#

var stream = await sampleFile.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite);

VB

Dim stream = Await sampleFile.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite)

Uwaga! Pamiętaj, aby umieścić słowo async wdeklaracji każdej metody, która używa operatora await. Jeśli chcesz dowiedzieć się więcej na ten temat, zobacz Quickstart: Using the await operator for asynchronous programming.

 

  1. Pobierz strumień wyjściowy poprzez wywołanie metody GetOutputStreamAt ze strumienia. Umieść poniższy kod w deklaracji using w celu zarządzania długością życia strumienia wyjściowego:

C#

using (var outputStream = stream.GetOutputStreamAt(0))
{
    // Add code to use the stream to write to your file
}

VB

Using outputStream = stream.GetOutputStreamAt(0)
  ' Add code to use the stream to write to your file
End Using

Zastosuj się do poniższych kroków, aby dodać kod wewnątrz deklaracji using do odczytu strumienia wyjściowego.

  1. Zapisz tekst do outputStream poprzez utworzenie nowego obiektu DataWriter i wywołanie metody DataWriter.WriteString:

C#

DataWriter dataWriter = new DataWriter(outputStream);
dataWriter.WriteString("The DataWriter provides method to write to various types, such as DataTimeOffset.");

VB

Await dataWriter.StoreAsync()
Await outputStream.FlushAsync()

Uwaga! Pamiętaj, aby umieścić słowo async wdeklaracji każdej metody, która używa operatora await. Jeśli chcesz dowiedzieć się więcej na ten temat, zobacz Quickstart: Using the await operator for asynchronous programming.

Możesz pobrać File Access sample, aby zobaczyć kod z tego poradnika wewnątrz metod.

 

Odczyt z pliku

Poniższe kroki pokażą, w jaki sposób dokonać odczytu z pliku, gdy masz uprawnienia do odczytu danego pliku i StorageFile, który go reprezentuje. Możesz uzyskać StorageFile, który reprezentuje plik do odczytu przez metodę StorageFolder.GetFileAsync:

C#

StorageFolder storageFolder = KnownFolders.DocumentsLibrary;
StorageFile sampleFile = await storageFolder.GetFileAsync("sample.txt");

VB

Dim text As String = Await Windows.Storage.FileIO.ReadTextAsync(sampleFile)

Uwaga! Pamiętaj, aby umieścić słowo async wdeklaracji każdej metody, która używa operatora await. Jeśli chcesz dowiedzieć się więcej na ten temat, zobacz Quickstart: Using the await operator for asynchronous programming.

 

Odczyt pliku za pomocą bufora

Wywołując metodę ReadTextAsync, odczytujesz bajty z bufora. Przykład File Access sample ilustruje, w jaki sposób należy odczytać bajty z bufora dzięki wywołaniu ReadBufferAsync:

 

C#

var buffer = await Windows.Storage.FileIO.ReadBufferAsync(sampleFile);

VB

Dim stream = Await sampleFile.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite)

Uwaga! Pamiętaj, aby umieścić słowo async wdeklaracji każdej metody, która używa operatora await. Jeśli chcesz wiedzieć na ten temat więcej, zobacz Quickstart: Using the await operator for asynchronous programming.

 

Następnie, użyj obiektu DataReader do odczytania długości bufora i przeczytaj zawartość bufora:

 

C#

DataReader dataReader = Windows.Storage.Streams.DataReader.FromBuffer(buffer);
string text = dataReader.ReadString(buffer.Length);

VB

Dim dataReader As DataReader = Windows.Storage.Streams.DataReader.FromBuffer(buffer)
Dim text As String = dataReader.ReadString(buffer.Length)

Odczyt pliku za pomocą strumienia

  1. Otwórz strumień dla pliku, wywołując metodę StorageFile.OpenAsync. Zwraca ona strumień zawartości pliku po zakończeniu operacji otwarcia.

Przykład File Access sample pokazuje, jak otworzyć strumień do pliku (sampleFile), wywołując metodę StorageFile.OpenAsync, tak jak przedstawiono to poniżej:

var stream = await sampleFile.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite);
  1. Pobierz rozmiar strumienia, który będzie przydatny później:

C#

var size = stream.Size;

VB

Dim dataReader As New DataReader(inputStream)
  1. Uzyskaj strumień wejściowy, wywołując metodę GetInputStreamAt. Przenieś poniższy kod do deklaracji Rusing, aby zarządzać cyklem życia strumienia wejściowego. Przekaż parametr 0, gdy wywołujesz GetInputStream, aby ustawić pozycję inputStream na początku strumieni:

C#

using (var inputStream = stream.GetInputStreamAt(0))
{
    // Add code to use the stream to read your file
}

VB

Using inputStream = stream.GetInputStreamAt(0)
    ' Add code to use the stream to read your file
End Using

Zastosuj się do następujących kroków, aby dodać kod wewnątrz deklaracji using, w celu odczytania wejścia strumienia.

  1. Obiekt DataReader otrzymasz poprzez przekazanie inputStream do konstruktora.

Przykład File Access sample pokazuje, jak utworzyć DataReader:

C#

DataReader dataReader = new DataReader(inputStream);

VB

Dim dataReader As New DataReader(inputStream)
  1. Odczytaj tekst, wywołując metody: DataReader.LoadAsync oraz DataReader.ReadString.

Przykład File Access sample pokazuje, jak odczytać tekst i sprawdzić, czy strumień nie jest pusty:

C#

uint numBytesLoaded = await dataReader.LoadAsync((uint)size);
string text = dataReader.ReadString(numBytesLoaded);

VB

Dim numBytesLoaded As UInteger = Await dataReader.LoadAsync(CUInt(size))
Dim text As String = dataReader.ReadString(numBytesLoaded)

Uwaga! Pamiętaj, aby umieścić słowo async wdeklaracji każdej metody, która używa operatora await. Jeśli chcesz dowiedzieć się więcej na ten temat, zobacz Quickstart: Using the await operator for asynchronous programming.

Możesz pobrać File Access sample, aby porównać kod w kontekście używanych metod.

Podsumowanie

Po ukończeniu pracy z tym poradnikiem powinieneś rozumieć, w jaki sposób należy odczytywać i zapisywać dane z pliku, jeśli posiadasz przypisany do niego StorageFile.