锁定文件以进行申请

时间:2018-08-10 09:46:43

标签: c# file locking

我正在从事一项服务。此服务将使用共享文件夹以2档运行。

共享文件夹包含图像,服务读取图像,执行一些操作并移动文件。我希望两个正在运行的服务都无法访问同一文件,并阻止用户删除处理文件。

实际上我有这个:

DirectoryInfo info = new DirectoryInfo("My Folder");
List<FileInfo> fileList = info.GetFiles();
foreach (FileInfo file in fileList)
{
    bool createdNew;
    Mutex fileLocker = new Mutex(true, file.Name, out createdNew);
    if (createdNew)
    {
        BitmapImage bitmapImage = new BitmapImage(new Uri(file.FullName));
       // Do some stuff
       if (null != fileLocker) fileLocker.ReleaseMutex();
    }
}

它防止2在同一台机器上访问文件,但不能分开访问文件,并且用户可以在服务使用时删除文件。

如何正确锁定文件?

1 个答案:

答案 0 :(得分:4)

使用FileStream打开文件并指定FileShare参数:

var file = new FileStream(name, FileMode.Create, FileAccess.ReadWrite, FileShare.None);

编辑:

要将BitmapImageFileStream一起使用,您需要使用BitmapImage.StreamSource属性。像这样:

var bitmapImage = new BitmapImage();

var file = new FileStream(name, FileMode.Create, FileAccess.ReadWrite, FileShare.None)
bitmapImage.BeginInit();
bitmapImage.StreamSource = file;
bitmapImage.EndInit();

此后,您需要确定如何处理Stream。您可以强制位图对其进行缓存,然后立即对其进行清理,或者 让位图保留流访问。有关here的更多信息。