我应该在 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 中的解析方法)或明确地捕获引起的问题。
我是否需要在读取 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 中的解析方法)或明确地捕获引起的问题。