我正在尝试写一个名为output.txt
的文件。我的代码第一次运行时很好,但是它第二次抛出异常:
该进程无法访问output1.txt,因为它正被另一个进程
使用
但是我在using
语句中使用它,它应该被处理掉,文件应该被解锁。
构造函数说if the file exists, it can either be appended to or overwritten
。似乎没有这样做是因为它抛出的IOException。
为什么会这样?
using (System.IO.StreamWriter file = new System.IO.StreamWriter(@directoryURL + "\\output"+outputNumber+".txt", true))
{
foreach (string line in splitOutput)
{
file.WriteLine(line);
}
}
答案 0 :(得分:1)
文件仍然可以锁定的原因有很多,例如:病毒扫描仪。
使用SysInternals Process Explorer,"查找句柄" ( Ctrl + F ),输入您的文件名,查看您的文件正在使用哪个应用程序。
您已将urltest.vshost.exe
标识为罪魁祸首(在评论中提及),因此它必须是您的代码......
在通过PasteBin提供的代码中,我看到以下循环
foreach (string file in fileEntries)
{
StreamReader fileStream = new StreamReader(file);
...
FileHander(fileStream, extension, websiteURL, fileName);
}
这会打开许多文件流,但FileHandler()
仅对某些扩展程序运行:
private void FileHander(StreamReader fileStream, string extension, string websiteURL, string fileName)
{
switch (extension)
{
...
CheckPowershell(fileStream, websiteURL, fileName);
...
}
}
只有CheckPowershell()
关闭文件:
private void CheckPowershell(StreamReader fileStream, string websiteURL, string fileName)
{
...
fileStream.Close();
}
因此,所有没有特定扩展名的文件(例如.txt
)都会保持打开状态。
快速解决方案似乎将Close()
从CheckPowershell()
移至FileHander()
。更专业的方式需要更多的重构。