如何防止在C#中读写共享文件时锁定该文件



我有一个桌面应用程序,下面是要遵循的流程。在应用程序初始化期间,应点击API,并将excel下载到共享位置。下载完成后,应用程序应读取excel文件。这对于运行应用程序的单个实例来说不会是问题。但由于这是一个桌面应用程序,运行多个实例(在不同的计算机上(,应用程序每次初始化时都会下载文件。我正在使用OLE Db引擎读取文件,文件被锁定,出现错误";ole db引擎无法读取该文件,因为它被另一个用户"打开";同时打开该应用程序的另一个实例。如何防止这种情况发生?

if (response.Result.IsSuccessStatusCode)
{
using (Stream streamToWriteTo = new FileStream(pathToDownloadReport, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
response.Result.Content.CopyToAsync(streamToWriteTo).Wait();
}
}

如果您想同时访问一个文件,您需要确保每个客户端只对该文件进行读取锁定。使用OleDb,您可以通过连接打开到具有ReadOnly访问权限的文件的连接。

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\pathtoyourexelfile.xlsx;Extended Properties="Excel 12.0;IMEX=1;ReadOnly=true;""

您仍然需要确保没有人在Excel中打开该文件。

由于您只能以只读方式访问您的文件,因此您不妨制作该文件的本地副本并打开该副本。这样锁定就不会有问题。

最新更新