以Notepad.exe的方式打开文件的标志是什么?

时间:2009-07-16 21:47:09

标签: c# file-io

我正在编写一个C#应用程序来读取另一个应用程序保持打开的文件。正如你们中的一些人可能猜到的,我得到的只是IOExceptions,因为“该文件正被另一个进程使用”。我试过调整一下File.Open();这是我目前的尝试:

FileStream fsIn = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);

(我知道FileShare标志对 之后访问该文件的其他进程更有意义,但我还是试过它。)

令我困惑的是Notepad.exe会打开文件就好了。在我深入了解Filemon以获取更多线索之前,您是否知道如何以记事本的方式打开文件?感谢。

5 个答案:

答案 0 :(得分:5)

你几乎拥有它。你真的想要FileShare.ReadWrite

FileStream fsIn = File.Open(fileName,
                            FileMode.Open,
                            FileAccess.Read,
                            FileShare.ReadWrite);

FileShare.Read禁止其他进程写入该文件。 FileShare.ReadWrite允许这样做。

  

写入允许后续打开   写作文件。如果这个标志是   未指定,任何要求打开   写作文件(通过这个过程或   另一个过程)将失败,直到   文件已关闭。但是,即使这样   指定了标志,附加   可能仍需要权限   访问该文件。

     

ReadWrite 允许   随后打开文件   阅读或写作。如果这个标志是   未指定,任何要求打开   用于阅读或写作的文件(由此   过程或其他过程)将失败   直到文件关闭。然而,   即使指定了这个标志,   其他权限可能仍然是   需要访问该文件。

它也向我退了。

答案 1 :(得分:3)

好吧,如果您正在处理小文件,请使用

string myFileContents = System.IO.File.ReadAllText(@"c:\daniellesteele.txt");

表示文字或

byte[] myfileContents = System.IO.File.ReadAllBytes(@"c:\aleagueoftheirmoan.mpg");

表示二进制文件。

答案 2 :(得分:1)

您确定在其他进程打开后,记事本是否可以打开文件?如果共享被授予,它看起来取决于谁最初拥有该文件。请参阅MSDN中的以下示例:

The following FileStream constructor opens an existing file and grants read-only access to other users (FileShare.Read).

[C#] 
FileStream s2 = new FileStream(name, FileMode.Open, FileAccess.Read, FileShare.Read);

当然我不是操作系统专家,所以这可能是完全错误的。

答案 3 :(得分:0)

有了这个

FileStream fsIn = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

您允许其他程序修改该文件,同时在您的程序中打开它。 因此,如果您打开该文件,则不会执行IOException“该文件正由另一个进程使用”。

答案 4 :(得分:-2)

尝试:

FileStream file = new FileStream(filename, FileMode.Open);