3

在这里快速搜索一无所获。因此,我开始使用一些相当迂回的方式在我的 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 中缺少很多功能,因此没有真正遵循解决此问题的方法

4

2 回答 2

5

SetLength或者,您可以在使用之前使用方法将流的长度设置为 0 StreamWriter

var stream = await file.OpenStreamForWriteAsync();
stream.SetLength(0);
using (var writer = new StreamWriter(stream))
{
    writer.Write(text);
}
于 2013-11-30T10:40:59.973 回答
1

为什么不在FileIO课堂上使用辅助方法?您可以致电:

FileIO.WriteTextAsync(selectedFileToSave, newTextContents);

如果你真的需要一个StreamWriter,首先通过调用截断文件

FileIO.WriteBytesAsync(selectedFileToSave, new byte[0]);

然后继续使用现有代码。

于 2013-05-08T05:03:17.240 回答