覆盖当前打开的文件,并在c#中使用

时间:2018-12-04 16:11:57

标签: c# file overwrite

我正在使用C#创建具有日志记录功能的GUI。创建日志文件时,会提供一个文件名。但是我有以下问题。例如,如果文件已经在桌面背景中打开,并且我想用相同的文件名命名,那么我会收到以下异常消息:

The process cannot access the file 'C:\blah\blah\mytest.csv' because it is being used by another process.

我正在使用下面的代码来检查文件是否存在,并使用流写入器来创建新文件。

if (FileUtils.Exists(fileName))
            {
                if (!FileUtils.Delete(fileName))
                {
                    cout<< Error replacing log file, it might be used by another process"; 
                }             
            }

//Exception handling
     public static bool Delete(string myfiletowrite)
            {
                try
                {
                    File.Delete(myfiletowrite);
                    return true;
                }
                catch (IOException)
                {
                    return false;
                }
            } 
myfile= new StreamWriter(myfiletowrite, true); //exception occurs here when I try to write to myfiletowrite which is currently open 

我不确定如何关闭在后台打开的文件,因此可以写入该文件。我将不胜感激,有人可以帮助我解决这个问题。

1 个答案:

答案 0 :(得分:0)

如果另一个应用程序未明确允许它(通过共享模式),则无法打开文件进行写入。

如果另一个应用程序在您的控制之下,则您可以选择(用FileShare.Write打开文件,在两个应用程序之间实现某些通信协议,使用公用服务访问文件,...)。

最好的选择是选择一个不同的文件名。