我有一个与Universal Platform App相关的问题,正在学习中!
快速提问 - 写入数据到文本文件时,我需要使用哪种方法来追加(而不是覆盖)字符串到文本文件中?目前,我正在使用异步流式传输的void方法,但它正在覆盖我的文件。以下是创建和写入文本文件的不同方式:https://msdn.microsoft.com/en-us/library/windows/apps/mt185401.aspx
这是目前的代码。是否需要修改以将数据追加到文本文件而不是覆盖它,或者我需要使用其他方法来追加数据?
//WRITE
//Create the text file to hold the data
Windows.Storage.StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
Windows.Storage.StorageFile ticketsFile = await storageFolder.CreateFileAsync("tickets.txt", Windows.Storage.CreationCollisionOption.OpenIfExists);
//Use stream to write to the file
var stream = await ticketsFile.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite);
using (var outputStream = stream.GetOutputStreamAt(0))
{
using (var dataWriter = new Windows.Storage.Streams.DataWriter(outputStream))
{
dataWriter.WriteString("Submitted: " + submitDate + "\n" + "Problem: " + problem + "\n" + "Room: " + location + "\n" + "Description: " + descriptionText.Text + "\n" + "Priority: " + priority + "\n");
await dataWriter.StoreAsync();
await outputStream.FlushAsync();
}
}
stream.Dispose(); // Or use the stream variable (see previous code snippet) with a using statement as well.
如果有所不同的话,我的读取代码是:
//READ
//Open the text file
stream = await ticketsFile.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite);
ulong size = stream.Size;
using (var inputStream = stream.GetInputStreamAt(0))
{
using (var dataReader = new Windows.Storage.Streams.DataReader(inputStream))
{
uint numBytesLoaded = await dataReader.LoadAsync((uint)size);
string savedTickets = dataReader.ReadString(numBytesLoaded);
textBox.Text = savedTickets;
}
}
谢谢。
stream.GetOutputStreamAt(0)
是你文件的开头,这就是为什么你会覆盖整个内容。你需要获取文件的长度并从那里开始,而不是从0开始。 - Paul Abbott