我应该在 C# 中读取文件之前锁定文件吗?

Should I lock a file before I read it in C#

我是否需要在读取 xml 文件之前在 C# 中锁定该文件,以及我是否永远不会写回该文件。

如果我使用,

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

有没有可能在多线程环境下,两个用户同时访问同一个文件而出现锁错误?

不,您不需要在读取文件之前锁定文件。您需要锁定它的唯一原因是您希望确保文件在您阅读时不会被更改。

是的,如果您使用该代码锁定文件,那么如果其他用户尝试写入文件或使用 read/write 权限读取文件,他们可能会遇到锁定错误。这在我从事的项目中很常见。

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

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

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

是的,您应该像在此处所做的那样准确地锁定它。

请注意,您在此处进行的锁定不会阻止其他线程或进程读取(这不会给您带来困难),而只会阻止写入。为了防止阅读(因为你要更改文件)使用 FileShare.None.

只有当你能够容忍文件被更改时才使用 FileShare.ReadWrite 或者隐式地通过将它传递给可以处理这个的东西(而不是任何 XML .NET 中的解析方法)或明确地捕获引起的问题。