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

C#分享中以独占模式打开文件

时间:2023-04-10 16:59:55 C#

,我想接收异常。我尝试了以下代码,但没有成功,即使我打开了foo.txt,我仍然可以访问Console.WriteLine语句。有任何想法吗?staticvoidMain(string[]args){使用(StreamiStream=File.Open("c:\software\code.txt",FileMode.Open,FileAccess.Read,FileShare.None)){Console.WriteLine("I在这”);}返回;你在做正确的事。可能你只是错误地测试了它。您应该使用在文件打开时锁定文件的程序打开它。记事本不会这样做。您可以运行该应用程序两次以查看:staticvoidMain(string[]args){//在运行之前确保test.txt存在。运行此应用程序两次以查看。File.Open("test.txt",FileMode.Open,FileAccess.Read,FileShare.None);控制台.ReadKey();你在做什么是正确的。如果您需要所有已经打开的文件,有一种方法可以查看NtQuerySystemInformation,您可以从http://www.codeproject.com/KB/shell/OpenedFileFinder.aspx获得建议,以获取目录中打开的所有文件。无论打开与否,两者都可以扩展到单个文件......FileShare.None仅在另一个进程也打开文件并且不允许共享以供读取时才有效。记事本和VisualStudio等程序不会锁定文本文件。通过编写一个打开文件然后等待的简单控制台模式程序来测试它:staticvoidMain(stringargs[]){using(FileStreamf=File.Open("c:\software\code.txt",FileMode.Open,FileAccess.Read,FileShare.None)){Console.Write("文件已打开。完成后按回车键。");控制台.ReadLine();从命令行(或VisualStudio的另一个实例)程序运行它,然后运行您的程序。这样,您就可以为FileMode和FileShare使用不同的值,以确保您的程序在所有情况下都能正确响应。而且,不,您不必先检查文件是否已打开。如果文件已经打开,您的代码应该抛出异常。所以你所要做的就是处理异常。我建议使用FileAccess.ReadWrite成员,因为某些文件可能已经打开但允许您对该文件进行读取访问。但是,我猜想所有打开了读/写访问权限的文件都不允许您的代码在非特殊情况下写入文件。当然(正如Mehrdad已经解释过的),如果您使用记事本等编辑器打开该文件作为测试,您将无法限制访问,因为记事本根本不会锁定该文件。以上就是C#学习教程:在C#中以独占模式打开文件共享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: