我想在独占模式下打开一个文件进行读取,如果某个进程/线程已经打开了该文件,我想收到一个异常.我尝试了下面的代码,但没有工作,即使我打开了foo.txt,我仍然可以访问Console.WriteLine语句.有任何想法吗?
static void Main(string[] args)
{
using (Stream iStream = File.Open("c:\\software\\code.txt", FileMode.Open,
FileAccess.Read, FileShare.None))
{
Console.WriteLine ("I am here");
}
return;
}
Run Code Online (Sandbox Code Playgroud)
Meh*_*ari 20
你正在做的是正确的事情.可能你只是错误地测试它.您应该使用一个程序打开它,该程序在文件打开时将其锁定.记事本不会这样做.您可以运行两次应用程序以查看:
static void Main(string[] args)
{
// Make sure test.txt exists before running. Run this app twice to see.
File.Open("test.txt", FileMode.Open, FileAccess.Read, FileShare.None);
Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)
通过编写一个简单的控制台模式程序来测试它,该程序打开文件然后等待:
static void Main(string args[])
{
using (FileStream f = File.Open("c:\\software\\code.txt", FileMode.Open, FileAccess.Read, FileShare.None))
{
Console.Write("File is open. Press Enter when done.");
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
从命令行(或 Visual Studio 的另一个实例)运行该程序,然后运行您的程序。这样,您可以使用 FileMode 和 FileShare 的不同值,以确保您的程序在所有情况下都能正确反应。
而且,不,您不必先检查文件是否打开。如果文件已经打开,您的代码应该引发异常。所以你所要做的就是处理这个异常。
我建议使用该FileAccess.ReadWrite成员,因为某些文件可能已经打开,但允许您Read访问该文件。但是,我猜测在非特殊情况下,所有打开Read/Write访问的文件都不允许您的代码访问Write该文件。
当然(正如 Mehrdad 已经解释的那样),如果您使用记事本等编辑器打开文件作为测试,您将无法限制访问,因为记事本根本不锁定文件。
| 归档时间: |
|
| 查看次数: |
43902 次 |
| 最近记录: |