当前位置: 首页 > 编程语言 > C#

锁定文件以进行写入-删除,同时允许任何进程读取分享

时间:2023-04-10 22:11:37 C#

C#学习教程:Lockingafileforwrite/deletewhileallowsanyprocesstoread我可以完全控制(A)和(B)的来源,因此我可以修改其中任何一个。如何防止用户在应用程序(A)运行时修改/删除文件,同时允许应用程序(A)读/写和应用程序(B)读取?使用FileShare.Read只允许从其他应用程序读取。您可以在应用程序A运行时通过打开流来锁定文件。您需要一个NonClosingStreamWrapper来避免在处理StreamWriter时处理流(这在使用时会自动发生)可以在此处找到JonSkeet的NonClosingStreamWrapperExample使用它在应用程序启动时锁定文件FileStreamfileStream=newFileStream(file,FileMode.OpenOrCreate,FileAccess.ReadWrite,FileShare.Read);写入文件时使用using(StreamWritersr=newStreamWriter(newNonClosingStreamWrapper(fileStream))){//照常写入文件}使用它在应用程序结束时释放文件fileStream。关闭();大多数时候,文件被锁定并不是为了阻止用户删除文件,而是通知用户运行应用程序的另一个实例,另一个用户正在“使用”该文件。如果多个用户将r/wa文件打开到共享文件夹,这将特别有用。在这种情况下,使用应用程序(A)打开文件时生成的“锁定文件”会更容易,而不是在文件系统级别锁定文件。所以任何其他应用程序都会注意到有一个锁文件(您可以使用相同的文件名但不同的扩展名来命名它),并且在锁文件中您可以写下谁以及何时获得了锁。应用程序(B)现在可以响应用户...“该文件似乎正在由机器yyy上的用户xxx修改,您真的要加载它吗?”当然当应用程序文件不再使用或应用程序终止锁定文件时必须删除应用程序。在崩溃导致文件系统锁定的“不幸”情况下,用户只能响应警告请求,也可以手动删除以解除锁定。希望这对您有所帮助,PaoloMarani如果您只想锁定文件以防止写入或删除,但又不想更改文件。我用它来锁定我以后使用的zip文件,所以它们可以被其他人阅读,但不能更改或更改。如果我使用@Cloudanger的回答,我无法在另一个进程中读取zip文件。FileStreamfileStreamSslFile=newFileStream(zipFile,FileMode.OpenOrCreate,FileAccess.Read,FileShare.Read);虽然我没有使用过它,但命名的Mutex将节省您的时间。在应用程序A中打开文件之前,创建一个如下所示的互斥量:Mutex(boolinitiallyOwned,stringname,outboolcreatedNew)将文件名作为第二个参数传递。现在你在应用程序B中打开一个文件,如果out参数createdNew为false,那么再次使用Mutex,那么这个文件已经被A打开了,所以你只能读取它。以上是C#学习教程:锁定文件写入/删除,同时允许任何进程读取所有共享内容。如果对大家有用,需要了解更多C#学习教程,希望大家多加关注——本文来自网络收藏,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: