【问题标题】:Winrt StreamWriter & StorageFile does not completely Overwrite FileWinrt StreamWriter & StorageFile 没有完全覆盖文件
【发布时间】:2013-05-01 18:45:27
【问题描述】:

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

【问题讨论】:

    标签: xaml visual-studio-2012 windows-runtime streamwriter


    【解决方案1】:

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

    var stream = await file.OpenStreamForWriteAsync();
    stream.SetLength(0);
    using (var writer = new StreamWriter(stream))
    {
        writer.Write(text);
    }
    

    【讨论】:

      【解决方案2】:

      为什么不直接使用FileIO 类中的辅助方法呢?您可以致电:

      FileIO.WriteTextAsync(selectedFileToSave, newTextContents);
      

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

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

      然后继续使用现有代码。

      【讨论】:

      • FileIO 效果不佳,似乎是希望您先将所有数据放在一起,然后再输出,而不是逐步进行。
      猜你喜欢
      • 2019-09-18
      • 2016-03-23
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 1970-01-01
      • 2014-08-19
      • 2012-10-15
      • 2011-05-06
      相关资源
      最近更新 更多