1. 程式人生 > >UWP入門(十)--建立、寫入和讀取檔案

UWP入門(十)--建立、寫入和讀取檔案

  • StorageFolder 類
  • StorageFile 類
  • FileIO 類

使用 StorageFile 物件讀取和寫入檔案

1. 建立檔案

// Create sample file; replace if exists.
Windows.Storage.StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;

Windows.Storage.StorageFile sampleFile = await storageFolder.CreateFileAsync("sample.txt"
,Windows.Storage.CreationCollisionOption.ReplaceExisting); Debug.Write(""+storageFolder.Path);

建立路徑為:

C:\Users\v-shenya\AppData\Local\Packages\e0e11ee4-de7a-4679-a860-651e63d24a4a_nj65d38msn17e\LocalState

2. 寫入檔案

下面介紹瞭如何使用 StorageFile 類在磁碟上寫入可寫檔案。 每種寫入檔案(除非你在建立後立即寫入檔案)的方法的常見第一步是使用 StorageFolder.GetFileAsync 獲取檔案

 //1.獲取檔案
StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
StorageFile sampleFile = await storageFolder.GetFileAsync("sample.txt");

2.1 將文字寫入檔案

通過呼叫 FileIO 類的 WriteTextAsync 方法,將文字寫入檔案

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

2.2 使用緩衝區將位元組寫入檔案(2 步)

//1
首先,呼叫 ConvertStringToBinary 以獲取你想要寫入檔案的位元組(基於隨機字串)的緩衝區 var buffer = Windows.Security.Cryptography.CryptographicBuffer.ConvertStringToBinary( "What fools these mortals be", Windows.Security.Cryptography.BinaryStringEncoding.Utf8); //2然後,通過呼叫 FileIO 類的 WriteBufferAsync 方法,將位元組從你的緩衝區寫入檔案 await Windows.Storage.FileIO.WriteBufferAsync(sampleFile, buffer);

2.3 使用流將文字寫入檔案(4 步)

//使用流將文字寫入檔案(4 步)
//1.首先,呼叫 StorageFile.OpenAsync 方法開啟檔案。 開啟操作完成後,它將返回檔案的內容流。
var stream = await sampleFile.OpenAsync(FileAccessMode.ReadWrite);

//2.接下來,通過從 stream 呼叫 GetOutputStreamAt 方法獲取輸出流。 將其放到 using 語句中以管理輸出流的生存期
using (var outputStream = stream.GetOutputStreamAt(0))
{
     // We'll add more code here in the next step.
}
stream.Dispose(); // Or use the stream variable (see previous code snippet) with a using statement as well.

//3.現在,將此程式碼新增到現有的 using 語句中,以通過建立一個新的 DataWriter 物件和呼叫 DataWriter.WriteString 方法寫入輸出流
using (var dataWriter = new Windows.Storage.Streams.DataWriter(outputStream))
{
     dataWriter.WriteString("DataWriter has methods to write to various types, such as DataTimeOffset.");
}

//4.最後,新增此程式碼(在內部 using 語句中)以使用 StoreAsync 將文字儲存到你的檔案並使用 FlushAsync 關閉該流
await dataWriter.StoreAsync();
await outputStream.FlushAsync();

3. 從檔案讀取

下面介紹瞭如何使用 StorageFile 類在磁碟上從檔案進行讀取。 每種從檔案讀取的方法的常見第一步是使用 StorageFolder.GetFileAsync 獲取檔案。

StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
StorageFile sampleFile = await storageFolder.GetFileAsync("sample.txt");

3.1 從檔案讀取文字

通過呼叫 FileIO 類的 ReadTextAsync 方法,從檔案讀取文字

string text = await Windows.Storage.FileIO.ReadTextAsync(sampleFile);

3.2 通過使用緩衝區從檔案讀取文字(2 步)

首先,呼叫 FileIO 類的 ReadBufferAsync 方法

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

然後,使用 DataReader 物件先讀取緩衝區的長度,然後讀取其內容

using (var dataReader = Streams.DataReader.FromBuffer(buffer))
{
     string text = dataReader.ReadString(buffer.Length);
}

3.3 使用流從檔案讀取文字(4 步)

通過呼叫 StorageFile.OpenAsync 方法,為你的檔案開啟流。 操作完成後,它將返回檔案的內容流

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

獲取稍後要使用的流的大小

ulong size = stream.Size;

通過呼叫 GetInputStreamAt 方法獲取輸入流。 將其放到 using 語句中以管理流的生存期。 呼叫 GetInputStreamAt 時指定 0,以將位置設定在流的開頭

using (var inputStream = stream.GetInputStreamAt(0))
    {
        // We'll add more code here in the next step.
    }

最後,將此程式碼新增到現有的 using 語句中以在流上獲取 DataReader 物件,然後通過呼叫 DataReader.LoadAsync 和 DataReader.ReadString 讀取文字

using (var dataReader = new Windows.Storage.Streams.DataReader(inputStream))
    {
        uint numBytesLoaded = await dataReader.LoadAsync((uint)size);
        string text = dataReader.ReadString(numBytesLoaded);
    }