为什么我看到“文件在另一个进程中打开了”?程序出错
本文关键字:程序出错 进程 我看 文件 另一个 为什么 | 更新日期: 2023-09-27 18:03:11
只有在我创建文件之后才会弹出错误,然后尝试从新文件中读取。我知道它为什么出错(文件必须仍然打开);但我失去了如何解决这个问题,因为FileInfo没有一个关闭的方法,不应该在文件上有一个流。显然,一定有更好的编码方式。如有任何帮助,不胜感激。
Code解释:构造函数构建我需要的数据,检查并创建(如果需要的话)目录和文件。构造函数完成后,我对数组中的每个FileInfo调用CheckHasData;这是错误发生的时间。
public FileHandler()
{
files = new FileInfo[fileNames.Count()];
if (!Directory.Exists(stdDataPath))
{
Directory.CreateDirectory(stdDataPath);
}
filePaths = new string[fileNames.Length];
for (int i = 0; i < fileNames.Length; i++)
{
this.filePaths[i] = stdDataPath + this.fileNames[i];
this.files[i] = new FileInfo(filePaths[i]);
}
//check for data in each file
checkAndMakeFiles();
}
private void checkAndMakeFiles()
{
foreach (FileInfo fI in this.files)
{
try
{
if (!fI.Exists)
{
fI.Create();
}
fI.Refresh();
}
catch (FileNotFoundException e)
{
System.Windows.Forms.MessageBox.Show("File not found: " + e.FileName, "error", System.Windows.Forms.MessageBoxButtons.OK);
}
catch (FileLoadException e)
{
System.Windows.Forms.MessageBox.Show("File failed to load : " + e.FileName + "'nReason: " + e.Message, "error", System.Windows.Forms.MessageBoxButtons.OK);
}
catch (Exception e)
{
System.Windows.Forms.MessageBox.Show("error: " + e.GetType() + "'nReason" + e.Message + "'n" + e.StackTrace, "error", System.Windows.Forms.MessageBoxButtons.OK);
}
}
}
private bool checkHasData(FileInfo fi)
{
FileStream fs = fi.OpenRead();
bool data = fs.Length > 0 ? true : false;
fs.Close();
return data;
}
因为FileInfo。Create打开一个流,但不能关闭它
using(fI.Create())
;
将调用包含在using语句中,如果也是空的,将确保由调用创建的流被关闭和处置
FileInfo上的Create()方法返回FileStream,使用后应关闭。
试试这个:
private void checkAndMakeFiles()
{
foreach (FileInfo fI in this.files)
{
if (!fI.Exists)
{
fI.Create();
fI.Close();
}
}
}
作为一个边注,无论何时你处理流最好使用使用,这样你就不需要管理资源。例如:
using (FileStream fs = fi.Create())
{
....
}