【问题标题】:Reading / Writing text file repeatedly / simultaneously反复/同时读取/写入文本文件
【发布时间】:2010-07-20 07:35:20
【问题描述】:

如何在文本文件上读写而不出现“文件已被另一个应用程序使用”的异常??

我尝试了 File.readalltext() 和 File.Appendalltext() 函数。我刚开始使用文件流。

哪种方案最适合我的方案?我也会很感激一些代码片段..

谢谢

【问题讨论】:

    标签: c# file-io filestream


    【解决方案1】:

    这与您在打开文件时请求的锁定和共享语义有关。

    不要使用File.ReadAllText() 的快捷方式,而是尝试使用System.IO.FileStreamSystem.IO.StreamReader / System.IO.StreamWriter

    打开文件:

    using (var fileStream = new FileStream(@"c:\myFile", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
    using (var streamReader = new StreamReader(fileStream))
    {
      var someText = streamReader.ReadToEnd();
    }
    

    注意FileShare.ReadWrite - 这是告诉流允许分享给其他读者或其他作者。

    对于写作尝试类似

    using (var fileStream = new FileStream(@"c:\myFile", FileMode.Create, FileAccess.Write, FileShare.Read))
    using (var streamWriter = new StreamWriter(fileStream))
    {
      streamWriter.WriteLine("some text");
    }
    

    注意FileShare.Read - 这是告诉流只允许分享给读者。

    阅读 System.IO.FileStream 及其构造函数重载,您可以准确地调整它的行为方式以满足您的目的。

    【讨论】:

    • 你的第二个代码块是FileShare.Read,而不是FileShare.Write
    【解决方案2】:

    您需要确保该文件没有被任何其他应用程序使用。

    使用您自己的应用程序,您无法在读取之间不关闭流的情况下多次读取文件。

    您需要找出为什么文件在使用中 - 像 FileMon 这样的工具可以帮助您找出原因。

    【讨论】:

      猜你喜欢
      • 2013-12-17
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多