C# 为应用程序锁定文件

C# 为应用程序锁定文件,c#,file,locking,C#,File,Locking,我正在做一项服务。此服务将使用共享文件夹在2个齿轮上运行 共享文件夹包含图像,服务读取图像,执行一些操作并移动文件。我希望两个正在运行的服务不能访问同一个文件,并阻止用户删除处理文件 其实我有这个, DirectoryInfo info = new DirectoryInfo("My Folder"); List<FileInfo> fileList = info.GetFiles(); foreach (FileInfo file in fileList) { bool c

我正在做一项服务。此服务将使用共享文件夹在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();
    }
}
DirectoryInfo=newdirectoryinfo(“我的文件夹”);
List fileList=info.GetFiles();
foreach(文件列表中的文件信息文件)
{
布尔创造了新的;
Mutex fileLocker=new Mutex(true,file.Name,out createdNew);
如果(createdNew)
{
BitmapImage BitmapImage=新的BitmapImage(新的Uri(file.FullName));
//做点什么
如果(null!=fileLocker)fileLocker.ReleaseMutex();
}
}
它阻止2在同一台计算机上访问文件,但不能在单独的计算机上访问,并且用户可以在服务使用该文件时删除该文件


如何正确锁定文件?

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

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

要将
BitmapImage
FileStream
一起使用,需要使用
BitmapImage.StreamSource
属性。比如说:

var bitmapImage = new BitmapImage();

var file = new FileStream(name, FileMode.Create, FileAccess.ReadWrite, FileShare.None)
bitmapImage.BeginInit();
bitmapImage.StreamSource = file;
bitmapImage.EndInit();
在此之后,您需要决定如何处理
。您可以强制位图缓存它,然后立即清除它,或者
让位图保留流访问。更多信息。

以锁定方式读取文件,这样文件系统锁定将实现您在代码中尝试执行的操作,请检查锁定文件。实际上,我正在使用文件路径中的
BitmapImage
打开文件(我使用
DirectoryInfo.GetFiles()
获取文件)。我应该用
FileStream
而不是
Uri
来加载我的图像,还是像互斥锁一样加载FileStream?我添加了一个编辑来帮助您进行
BitmapImage
初始化。非常感谢,这就是我想要的