这里的快速搜索没有任何结果。所以,我已经开始使用一些相当迂回的方式在我的WinRT应用程序中使用StreamWriter。阅读效果很好,写作方式不同。我所看到的是,当我选择要写的文件时,如果我选择一个新文件则没问题。该文件按我的预期创建。如果我选择覆盖文件,那么文件会被覆盖到一个点,但是流停止写入的点,如果原始文件很大,则旧内容存在于我的新流写入的位置。
代码是这样的:
public async void WriteFile(StorageFile selectedFileToSave)
{
// At this point, selectedFileToSave is from the Save File picker so can be a enw or existing file
StreamWriter writeStream;
Encoding enc = new UTF8Encoding();
Stream dotNetStream;
dotNetStream = await selectedFileToSave.OpenStreamForWriteAsync();
StreamWriter writeStream = new StreamWriter(dotNetStream, enc);
// Do writing here
// Close
writeStream.Write(Environment.NewLine);
await writeStream.FlushAsync();
await dotNetStream.FlushAsync();
}
有人能提供我可能遗失的线索吗? WinRT中缺少许多功能,因此没有真正遵循这个方法来解决这个问题
答案 0 :(得分:5)
或者,您可以在使用SetLength
之前使用StreamWriter
方法将流的长度设置为0:
var stream = await file.OpenStreamForWriteAsync();
stream.SetLength(0);
using (var writer = new StreamWriter(stream))
{
writer.Write(text);
}
答案 1 :(得分:1)
为什么不在FileIO
类中使用辅助方法?你可以打电话:
FileIO.WriteTextAsync(selectedFileToSave, newTextContents);
如果您确实需要StreamWriter
,请先通过调用
FileIO.WriteBytesAsync(selectedFileToSave, new byte[0]);
然后继续使用现有代码。