【问题标题】:How to prevent my C# application from opening the same file twice如何防止我的 C# 应用程序两次打开同一个文件
【发布时间】:2010-08-09 20:48:08
【问题描述】:

我需要知道 C# 打开的文本文件何时不再使用 - 我的应用程序将文本写入 txt 文件,有时在再次尝试写入时仍会锁定它。 不用担心另一个进程或单词在释放后可能会抢回锁。 有没有办法确定文件是否仍然被锁定,如果没有锁定则重新尝试写入?

【问题讨论】:

  • 以前在这里问过:stackoverflow.com/questions/1304/…
  • @David:不,我认为这是一个不同的问题。在这里,真正的问题是他们没有处理。
  • 顺便说一下,你可以用各种工具检查是哪个进程锁定了一个文件,我用的是“Unlocker”。

标签: c# .net file


【解决方案1】:

以下是使用using 块读取文件的示例,它将为您关闭文件:

using (FileStream fs = File.OpenRead(@"c:\path\filename.txt")) //Open the file here
{
    using (StreamReader sr = new StreamReader(fs))
    {
        while (!sr.EndOfStream)
        {
            Console.WriteLine(sr.ReadLine());
        }
    }
} //File will close when scope of this brace ends.

当有连续的​​using 块时,有些人喜欢省略大括号的外层。为了清楚起见,我将它们包括在内。请注意using 块在幕后使用try-finally 块以确保即使存在未捕获的异常也会关闭您的文件。这是一件好事。

另见RAII

【讨论】:

    【解决方案2】:

    您可能没有正确处理文件。如果您处置了该文件,您将能够立即再次对其进行写入,而不必等待该文件可用。

    【讨论】:

    • 我们可能应该推荐使用using 块,而不是显式调用Dispose
    • @Steven,同意...我不想讨论如何调用 dispose,但是使用通常是最好的方法。
    • 明白。幸运的是,Brian 很友好地为我们提供了一个工作示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多