Windows 8 Metro Style App中文件操作都包含在Windows.Storage命名空間中,其中包括StorageFolder,StorageFile,FileIO等類庫。
文件對象用StorageFile實現,文件頭用StorageFolder實現,下面看下具體的用法及各類庫下的屬性他方法。
創建文件
StorageFolder storageFolder=KnownFolders.DocumentsLibrary; StorageFile storageFile=await storageFolder.CreateFileAsync("sample.txt",CreationCollisionOption.ReplaceExisting);
KnownFolders提供了系統中常規的文件路徑。
CreationCollisionOption提供了創建文件沖突時的操作選項。
FileIO對象負責文件的讀/寫操作
讀取文件
string fielContent=await FileIO.ReadTextAsync(storageFile);
讀取操作包含三種方式:
返回普通文本 ReadTextAsync(storageFile)/ReadTextAsync(storageFile,UnicodeEncoding)(返回指定的文本編碼格式)
返回流 ReadBufferAsync(storageFile)
IBuffer buffer = await FileIO.ReadBufferAsync(storageFile); using (DataReader dataReader = DataReader.FromBuffer(buffer)) { string fileContent = dataReader.ReadString (buffer.Length); }
還可通過流讀取文件內容
using (IRandomAccessStream readStream = await sampleFile.OpenAsync(FileAccessMode.Read)) { using (DataReader dataReader = new DataReader(readStream)) { uint numBytesLoaded = await dataReader.LoadAsync((uint)readStream.Size); string fileContent = dataReader.ReadString(numBytesLoaded); } }
寫入文件
await FileIO.WriteTextAsync(storageFile,content)
寫入文件也包含以下幾種操作:
寫入Buffer數據 WriteBufferAsync(IStorage File,IBuffer buffer)
寫入bytes字節數據 WriteBytesAsync(IStorage File,bytes[] byte)
寫入文本行 WriteLinesAsync(IStorageFile File, IIterable(String)) /WriteLinesAsync(IStorageFile File, IIterable(String), UnicodeEncoding)
寫入字符串 WriteTextAsync(IStorageFile File,string content)
通過流寫入內容
using (IRandomAccessStream writeStream = await storageFile.OpenAsync(FileAccessMode.ReadWrite)) { using (DataWriter dataWriter = new DataWriter(writeStream)) { dataWriter.WriteString(userContent); await dataWriter.StoreAsync(); await dataWriter.FlushAsync(); } }
同樣也提供追加文本的方法
AppendLinesAsync(IStorageFile, IIterable(String)) /AppendLinesAsync(IStorageFile, IIterable(String), UnicodeEncoding)
AppendTextAsync(IStorageFile, String) /AppendTextAsync(IStorageFile, String, UnicodeEncoding)
刪除文件
await storageFile.DeleteAsync()
復制文件
StorageFile storageFileCopy = await storageFile.CopyAsync(KnownFolders.DocumentsLibrary, "sample - Copy.txt", NameCollisionOption.ReplaceExisting);
復制文本也有幾種方式
CopyAndReplaceAsync
CopyAsync(IStorageFolder)
CopyAsync(IStorageFolder, String FileName)
CopyAsync(IStorageFolder, String FileName, NameCollisionOption)
重命名文件
StorageFile storageFile1=await storageFile.RenameAsync("sampleRe.txt")
移動文件
await storageFile.MoveAsync(StorageFolder NewStorageFolder,string NewFileName);
提到文件操作,不得不說說文件流。
在以前的開發中,我們經常用到的就是文件流、字節數組等操作,在WinRT中有些區別,文件流有IRandomAccessStream、FileInputStream、FileOutStream、FileRandomAccessStream等,用IBuffer代替了byte[]。下面看看具體的用法:
獲取文件流
IRandomAccessStream readStream = await sampleFile.OpenAsync(FileAccessMode.Read) FileInputStream inputStream=readStream.GetInputStreamAt(0) as FileInputStream; FileOutputStream outStream=readStream.GetOutputStreamAt(0) as FileOutputStream;
DataReader/DataWriter的用法見上
IBuffer、byte[]、Stream之間的轉換
IBuffer buffer = await FileIO.ReadBufferAsync(sampleFile); byte[] bytes=WindowsRuntimeBufferExtensions.ToArray(buffer,0,(int)buffer.Length); Stream stream = WindowsRuntimeBufferExtensions.AsStream(buffer);
還有很多文件操作的場景沒有整理,雖然WinRT中提供了很多文件流,但它們的核心用法都是類似 的,希望在后續的不斷使用中慢慢接觸不同類型流的使用。