UWP入門(十)--建立、寫入和讀取檔案
阿新 • • 發佈:2019-02-15
- 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);
}