我应该在用C#读取文件之前锁定文件

时间:2015-04-17 11:20:31

标签: c# file locking

在我阅读之前是否需要在C#中锁定xml文件,如果我从不写回该文件。

如果我使用,

   using(FileStream fileStream = new FileStream(
                "myXmlFile.xml", 
                FileMode.Open, 
                FileAccess.Read, 
                FileShare.Read))

是否有可能在多线程环境中,两个用户可以同时访问同一个文件并出现锁定错误?

2 个答案:

答案 0 :(得分:1)

在阅读文件之前,您不需要锁定文件。您需要锁定它的唯一原因是,如果您想确保在阅读文件时不会更改该文件。

如果您使用该代码锁定文件,则是,如果其他用户尝试写入文件或使用读/写权限读取文件,则会出现锁定错误。我工作的程序很常见。

除非确实需要,否则不应锁定文件。

如果您不想锁定文件,请使用ReadWrite共享枚举。

   using(FileStream fileStream = new FileStream(
                "myXmlFile.xml", 
                FileMode.Open, 
                FileAccess.Read, 
                FileShare.ReadWrite))

答案 1 :(得分:1)

是的,你应该像在那里那样精确锁定它。

请注意,此处的锁定不会阻止其他线程或进程读取(这不会导致您遇到困难),但只能阻止写入。为了防止阅读(因为您要更改文件),请使用FileShare.None

只有当你能够通过将文件传递给可以处理它的东西而隐式地写入时才能容忍文件被更改(不是几乎任何XML解析方法的情况)在.NET中)或通过捕捉引起的问题明确地。