小编GDe*_*ini的帖子

独占锁定文件然后删除/移动它

我正在C#中实现一个应该监视目录的类,在删除文件时处理这些文件,然后在处理完成后立即删除(或移动)处理过的文件.由于可以有多个线程运行此代码,第一个运行此代码的线程将其锁定,因此没有其他线程将读取相同的文件,并且没有外部进程或用户可以以任何方式访问.我想保持锁定直到文件被删除/移动,因此没有其他线程/进程/用户访问它的风险.

到目前为止,我尝试了2个实现选项,但它们都没有按我的意愿工作.

选项1

FileStream fs = file.Open(FileMode.Open, FileAccess.Read, FileShare.Delete);
//Read and process
File.Delete(file.FullName); //Or File.Move, based on a flag
fs.Close();
Run Code Online (Sandbox Code Playgroud)

选项2

FileStream fs = file.Open(FileMode.Open, FileAccess.Read, FileShare.None);
//Read and process
fs.Close();
File.Delete(file.FullName); //Or File.Move, based on a flag
Run Code Online (Sandbox Code Playgroud)

选项1的问题是其他进程可以访问该文件(它们可以删除,移动,重命名),同时应该完全锁定.

选项2的问题是文件在被删除之前被解锁,因此其他进程/线程可以在删除发生之前锁定文件,因此删除将失败.

我正在寻找一些可以使用我已经拥有独占访问权限的文件句柄执行删除的API.

编辑

被监视的目录驻留在pub共享中,因此其他用户和进程可以访问它. 问题不是在我自己的进程中管理锁.我试图解决的问题是如何独占锁定文件然后移动/删除它而不释放锁

.net c# winapi file-locking

14
推荐指数
3
解决办法
1万
查看次数

标签 统计

.net ×1

c# ×1

file-locking ×1

winapi ×1