我想知道是否有办法创建文件并设置最后写入时间(和其他时间戳信息),而不允许另一个进程获取文件之间的锁定这两个操作。创建文件,然后设置时间戳而不释放文件锁定
我想这样做的原因是为了解决防病毒刚创建文件时获取文件锁定的问题,并且在文件属性尝试设置时仍然存在锁定问题。具体来说,我正在使用的代码是SevenZipSharp(不再维护,据我所知)。再现这个问题
代码是:
var filePath = "test.txt";
using (var fileStream = new FileStream(filePath, FileMode.Create, FileAccess.ReadWrite))
{
var bytes = Encoding.ASCII.GetBytes("Hello fail.");
fileStream.Write(bytes, 0, bytes.Length);
var fileInfo = new FileInfo(filePath);
fileInfo.CreationTime = DateTime.Now;
}
这将产生执行最后陈述时,以下异常: System.IO.IOException “该进程无法访问文件“C:\ test.txt的'因为它正在被另一个进程使用。“
我在考虑用重试机制来实现时间属性的设置,但是想知道是否有更优雅的解决方案。
为什么*“不允许另一个进程获取文件之间的锁定”*?为什么你以后不能改变时间? – Sinatr
听起来像反病毒软件攻击它,并防止修改? –
您可以在fileStream.Dispose()后更改CreationTime。但不在两者之间。 – 2016-07-25 14:34:20