3

可能重复:
打开文件只读

在我的应用程序中,我正在使用 Debug.WriteLine() 将一些信息写入 Log.txt,并且我想提供一个显示 Log.txt 内容的表单。

但是当我尝试打开文件 Log.txt 时,我遇到了一个异常:

该进程无法访问文件“F:\Rajeev\10-11-2012\Temp\Temp\bin\Debug\Log.txt”,因为它正被另一个进程使用。

我该如何克服这个问题?

另一个问题是,我可以使用记事本打开同一个文件。那为什么我不能使用我的应用程序打开同一个文件?

以下是我用于指定日志文件的代码:

TextWriterTraceListener tr = new TextWriterTraceListener(System.IO.File.CreateText("Log.txt"));
Debug.Listeners.Add(tr);
Debug.AutoFlush = true;

以下是我用于写入日志文件的代码:

Debug.WriteLine("ERROR: Invalid Username " + s);

以下是我用于打开日志文件(已由“调试”打开)以显示在日志查看器(我的应用程序中的“表单”)中的代码:

File.Open(LogFilePath, FileMode.Open, FileAccess.Read,FileShare.Read);
4

1 回答 1

3

这是由打开文件的权限决定的。如果一个程序以任何类型的独占模式打开文件,那么其他程序将具有有限的访问权限或没有访问权限。

因此,您可以确保不要尝试以独占方式打开文件(您没有显示您的代码)。但是,如果您没有其他程序的源代码,那么您只能希望该程序不会以独占方式打开文件。否则,除了终止另一个程序之外,我看不出你能做些什么。

编辑

以下代码:

File.Open(LogFilePath, FileMode.Open, FileAccess.Read, FileShare.Read);

说其他文件也可以读取打开的文件,但我相信他们无法写入。因此,如果另一个程序正在写入该文件,那将是不允许的。您可以尝试FileShare.ReadWrite,但如果您有其他程序的来源,我仍然看不到您指出的位置。我只是错过了吗?

于 2012-11-30T15:17:34.267 回答