我正在从事一项服务。此服务将使用共享文件夹以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在同一台机器上访问文件,但不能分开访问文件,并且用户可以在服务使用时删除文件。
如何正确锁定文件?
答案 0 :(得分:4)
使用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();
此后,您需要确定如何处理Stream
。您可以强制位图对其进行缓存,然后立即对其进行清理,或者
让位图保留流访问。有关here的更多信息。