锁定文件以进行写入/删除,同时允许任何进程读取
我正在使用C#(.NET)开发应用程序,并且在处理文件锁定时遇到问题。
我完全控制了(A)和(B)的来源,所以我可以修改它们中的任何一个。
如何在应用程序(A)运行时阻止用户修改/删除文件,同时允许应用程序(A)读/写,应用程序(B)读取?
使用FileShare.Read
仅允许从其他应用程序读取。 您可以通过在应用程序A运行时打开流来锁定文件。 您需要一个NonClosingStreamWrapper
来避免在处理StreamWriter
时处理流(这会在using
时自动发生)
Jon Skeet的 NonClosingStreamWrapper
可以在这里找到
例
应用程序启动时使用它来锁定文件
FileStream fileStream = new FileStream(file, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read);
写入文件时使用
using (StreamWriter sr = new StreamWriter(new NonClosingStreamWrapper(fileStream))) { // File writing as usual }
当应用程序结束时使用它来释放文件
fileStream.Close();
大多数情况下,锁定文件不是为了防止用户删除文件,而是通知用户运行另一个用户正在“使用”该文件的应用程序的另一个实例。 如果多个用户将r / wa文件打开到共享文件夹,这将特别有用。 在这种情况下,使用在Appication(A)打开文件时生成的“锁定文件”将更容易,而不是在文件系统级别锁定文件。 因此,任何其他应用程序都会注意到存在锁定文件(您可以使用相同的文件名但不同的扩展名来命名),并且在锁定文件中您可以编写谁以及何时获得锁定。 应用程序(B)现在可以响应用户……“文件似乎正在被用户xxx从机器yyy修改,你真的想要加载吗?”
当然,应用程序必须在应用程序文件不再使用或应用程序终止时删除锁定文件。 在“不幸”的情况下,崩溃会导致锁定文件系统,用户只能对警告请求作出响应,或者可以手动删除它以释放锁定。
希望这可以帮助,
Paolo Marani
如果您只想锁定文件,以防止写入或删除,但您不想更改文件。
我使用它来锁定我稍后使用的zip文件,因此可以被其他人阅读,但不能更改或更改。 如果我使用@Cloudanger的答案,我无法在其他进程中读取zip文件。
FileStream fileStreamSslFile = new FileStream(zipFile, FileMode.OpenOrCreate, FileAccess.Read, FileShare.Read);
虽然我没有使用它,但是名为Mutex
可以节省你的一天。 在应用程序A中打开文件之前,请创建一个如下所示的互斥文件:
Mutex(bool initiallyOwned, string name, out bool createdNew)
将文件名作为第二个参数传递。
现在当你在应用程序B中打开一个文件时,再次使用Mutex
如果out
参数createdNew
为false,那么文件已经被A打开,所以你只能读它。
上述就是C#学习教程:锁定文件以进行写入/删除,同时允许任何进程读取分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1044578.html