C# 过程可以';无法访问文件导致它';mscorlib.dll使用的
我编写了一个.dll文件,它创建了具有csv扩展名的日志文件。问题是,每当它需要创建路径时(因为它不存在),它就无法访问文件以在其中写入内容C# 过程可以';无法访问文件导致它';mscorlib.dll使用的,c#,C#,我编写了一个.dll文件,它创建了具有csv扩展名的日志文件。问题是,每当它需要创建路径时(因为它不存在),它就无法访问文件以在其中写入内容 void InitializePathDirectory(string dir) { if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } } void InitializeFileDirectory(string file) { i
void InitializePathDirectory(string dir)
{
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
}
void InitializeFileDirectory(string file)
{
if (!File.Exists(file))
{
File.Create(file);
}
}
这里的道路是
private string dirname = $"{path}\\Logs";
private string filename = $"{path}\\Logs\\{DateTime.Now.ToString("dd.MM.yyyy")}.csv";
当我关闭使用此dll的应用程序时,它通常会写入
已将应用程序关闭到日志文件中
public void onExit()
{
//var a is the DateTime, when the application starts
var b = DateTime.Now;
string temp = Convert.ToString(b - a);
string[] time = temp.Split('.');
File.AppendAllText(filename, $"Time:; {time[0]}\n");
File.AppendAllText(filename, $"Starttime:; {a.ToString("HH:mm:ss")}\n");
File.AppendAllText(filename, $"Endtime:; {b.ToString("HH:mm:ss")}\n\n");
}
但是,如果日志文件路径是在同一次运行中创建的,则我无法将任何内容写入该文件,它会引发一个异常,即“mscorlib.dll”当前使用该日志文件,因此我无法使用返回的文件流访问它,该文件流允许您读取/写入新创建的文件。如果不处理/关闭此流,它将导致文件保持打开状态,从而阻止后续调用file.AppendAllText()
您有2种3种处理方法:
using(File.Create(filename)){}
File.Create(filename.dispose()代码>
File.Create()
。该方法已检查该文件是否存在,如果不存在,将创建该文件,因此file.create()
是完全冗余的,不需要:
打开一个文件,将指定的字符串附加到该文件,然后关闭该文件如果文件不存在,此方法将创建一个文件,将指定字符串写入该文件,然后关闭该文件
Directory.Exists(dir)
的调用也是冗余的。有关以下内容,请参阅文档:
在指定路径中创建所有目录和子目录,除非它们已经存在。
尝试关闭
file.Create
返回的文件流。file.Create(文件)代码>返回您保持打开状态的文件流。您不需要创建文件,只需跳过“InitializeFileDirectory”方法即可。当您调用“File.AppendAllText”时,将自动创建该文件。如果您用File.Create()射中左脚,则会自动创建该文件。记录文件的一个好做法是尽早创建它们,并在程序生命周期内保持它们的打开状态。和使用日志库。如果下面的答案之一回答了您的问题,即此网站的工作方式,您将“接受”答案,更多信息如下:。但前提是你的问题真的得到了回答。如果没有,考虑在问题中添加更多的细节。