Windows 8 檔案 IO 提供三種資料寫入/讀取路徑,適用不同效能與記憶體需求:
FileIO.WriteTextAsync/ReadTextAsyncFileIO.WriteBufferAsync/ReadBufferAsync,配合 DataWriter/ReaderOpenTransactedWriteAsync/OpenAsync,支援交易式寫入.txt 支援
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<TextBox Name="tbFileName" Text="test.txt" .../>
<TextBox Name="tbContent" Text="預設寫入內容" .../>
<TextBlock Name="tb_show" .../>
<Button Name="btnCreateFile" Content="建立檔案" Click="btnCreateFile_Click" .../>
<Button Name="btnWriteFile_Copy" Content="寫入字串檔案" Click="btnWriteFile_Copy_Click" .../>
<Button Name="btnReadFile" Content="讀取字串檔案" Click="btnReadFile_Click" .../>
<Button Name="btnWriteBufferFile" Content="寫入 Buffer 資料" Click="btnWriteBufferFile_Click" .../>
<Button Name="btnReadBufferFile" Content="讀取 Buffer 資料" Click="btnReadBufferFile_Click" .../>
<Button Name="btnWriteStreamFile" Content="寫入 Stream 資料" Click="btnWriteStreamFile_Click" .../>
<Button Name="btnReadStreamFile" Content="讀取 Stream 資料" Click="btnReadStreamFile_Click" .../>
</Grid>
public sealed partial class MainPage : Page {
// 取得文件庫資料夾
StorageFolder storageFolder = KnownFolders.DocumentsLibrary;
// === String 模式 ===
private async void btnCreateFile_Click(object sender, RoutedEventArgs e) {
var file = await storageFolder.CreateFileAsync(tbFileName.Text.Trim(), CreationCollisionOption.ReplaceExisting);
tb_show.Text = $"提示:建立了檔案--{tbFileName.Text.Trim()}";
}
private async void btnWriteFile_Copy_Click(object sender, RoutedEventArgs e) {
try {
var content = tbContent.Text.Trim() + "文字模式";
var file = await storageFolder.GetFileAsync(tbFileName.Text.Trim());
await FileIO.WriteTextAsync(file, content);
tb_show.Text = $"提示:檔案寫入成功,內容為「{content}」";
} catch { tb_show.Text = "提示:未找到該檔案,請先建立檔案"; }
}
private async void btnReadFile_Click(object sender, RoutedEventArgs e) {
try {
var file = await storageFolder.GetFileAsync(tbFileName.Text.Trim());
var content = await FileIO.ReadTextAsync(file, UnicodeEncoding.Utf8);
tb_show.Text = $"提示:檔案以字串方式讀取成功,內容為「{content}」";
} catch { tb_show.Text = "提示:未找到該檔案,請先建立檔案"; }
}
// === Buffer 模式 ===
private async void btnWriteBufferFile_Click(object sender, RoutedEventArgs e) {
try {
var content = tbContent.Text.Trim() + "Buffer模式";
var file = await storageFolder.GetFileAsync(tbFileName.Text.Trim());
var buffer = GetBufferFromString(content);
await FileIO.WriteBufferAsync(file, buffer);
tb_show.Text = $"提示:檔案寫入成功,內容為「{content}」";
} catch { tb_show.Text = "提示:未找到該檔案,請先建立檔案"; }
}
private async void btnReadBufferFile_Click(object sender, RoutedEventArgs e) {
var file = await storageFolder.GetFileAsync(tbFileName.Text.Trim());
var buffer = await FileIO.ReadBufferAsync(file);
using (var reader = DataReader.FromBuffer(buffer)) {
var content = reader.ReadString(buffer.Length);
tb_show.Text = $"提示:檔案以 Buffer 方式讀取成功,內容為「{content}」";
}
}
// String → IBuffer 轉換
private IBuffer GetBufferFromString(string str) {
using (var ms = new InMemoryRandomAccessStream())
using (var writer = new DataWriter(ms)) {
writer.WriteString(str);
return writer.DetachBuffer();
}
}
// === Stream 模式(交易式寫入) ===
private async void btnWriteStreamFile_Click(object sender, RoutedEventArgs e) {
try {
var content = tbContent.Text.Trim() + "Stream模式";
var file = await storageFolder.GetFileAsync(tbFileName.Text.Trim());
using (var tx = await file.OpenTransactedWriteAsync())
using (var writer = new DataWriter(tx.Stream)) {
writer.WriteString(content);
tx.Stream.Size = await writer.StoreAsync();
await tx.CommitAsync();
tb_show.Text = $"提示:檔案寫入成功,內容為「{content}」";
}
} catch { tb_show.Text = "提示:未找到該檔案,請先建立檔案"; }
}
private async void btnReadStreamFile_Click(object sender, RoutedEventArgs e) {
var file = await storageFolder.GetFileAsync(tbFileName.Text.Trim());
using (var stream = await file.OpenAsync(FileAccessMode.Read))
using (var reader = new DataReader(stream)) {
var size = stream.Size;
if (size <= UInt32.MaxValue) {
var loaded = await reader.LoadAsync((UInt32)size);
var content = reader.ReadString(loaded);
tb_show.Text = $"提示:檔案以 Stream 方式讀取成功,內容為「{content}」";
}
}
}
}
注意:所有使用 await 的方法必須標記 async 關鍵字。
原始碼下載:Win8File.rar(VS2012 + Windows 8)