How to lock a file with C#?
基本上,假设您想要锁定一个JSON文件,读取它,然后写入它,最后解锁它。您可以使用另一个问题的答案锁定文件。
然而,我遇到了这样的问题:允许我读取文件,但在没有先解锁文件的情况下,不能在之后写入文件。也就是说,
推荐的方法似乎相当受欢迎,它将
相同的
从它自己的资源中
.
例子:
using (var fs = new FileStream(GetJsonPath(), FileMode.Open, FileAccess.ReadWrite,
FileShare.None))
{
SomeDtoType dto;
using (StreamReader reader = new StreamReader(fs))
{
dto = ((SomeDtoType)(new JsonSerializer()).Deserialize(reader,
typeof(SomeDtoType)));
}
// Make changes to the DTO.....
using (StreamWriter writer = new StreamWriter(fs))
{
new JsonSerializer().Serialize(writer, dto);
}
}
using
创建
StreamWriter
引发以下异常:
流不可写。
现在我想到的是
FileShare.None
. 这里的问题是,这个特定的枚举显然不仅仅是为外部进程设置锁权限。
如何锁定外部线程/进程以避免更改/删除文件,同时允许自己的线程/进程进行这两个后续的读/写访问?
编辑:
很明显所有的东西
使用
为
StreamReader
fs.Position
到
0
在读和写之间解决了这个问题。这个
fs.位置
部分没问题,但必须将写逻辑移到
使用
为
,这样他们就可以使用相同的
FileStream
洛克,看起来有点奇怪。。。