关于此错误的大多数C#SO问题涉及Streamwriter。我不相信这个问题是相关的。
我有一个WinForms应用程序。该应用程序产生一个后台工作者来完成实际工作(图像处理)以保持响应。在一个函数中,我尝试重命名目录中的所有图像文件(不打开它们)。我收到错误" 该进程无法访问该文件,因为它正由另一个进程使用。"我无法追踪错误的来源。
在MainForm(form)类中 - 生成backgroundworker:
private void b_preprocessImages_Click(object sender, EventArgs e)
{
if (bgw_preprocessor.IsBusy == false)
{
bgw_preprocessor.RunWorkerAsync();
}
else
{...}
}
仍然在MainForm类 - 后台工作者的DoWork方法:
private void bgw_preprocessor_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
ImagePreprocessor preprocessor = new ImagePreprocessor();
preprocessor.SetImageDirectoryPath(path);
preprocessor.PreprocessImages(worker);
}
Inside ImagePreprocessor类 - 后台工作程序运行的方法:
public void PreprocessImages(BackgroundWorker worker)
{
this.worker = worker;
if (!Directory.Exists(SourceImageDirectoryPath))
return;
else
{...}
if (!AreAllImagesValid())
return;
else
{...}
print.PrintLine("Renaming files...");
AutoRenameAllImages();
Inside ImagePreprocessor class - 重命名图像的方法:
public void AutoRenameAllImages()
{
for (int i = 0; i < sourceImageFiles.Length; i++)
{
// sourceImageFiles[] is an array of strings
FileInfo f = new FileInfo(sourceImageFiles[i]);
string newName = Path.Combine(SourceImageDirectoryPath, "src_" + i.ToString() + f.Extension);
print.PrintLine("Renaming " + f.Name + " to " + (new FileInfo(newName)).Name);
try
{
f.MoveTo(newName);
//File.Move(sourceImageFiles[i], newName); // doesn't work either
}
catch (Exception ex)
{
...
}
}
}
尝试重命名第一个文件时会立即遇到错误。据我所知,所有相关文件都没有在任何其他应用程序中打开。我该如何解决这个问题?
答案 0 :(得分:0)
查看是否可以在IDE打开的情况下删除该文件。如果您无法关闭IDE并尝试再次删除该文件。如果它工作,则IDE保持文件打开。如果您在代码运行时忘记了代码或忘记关闭文件,通常会发生这种情况。
我不是说这会解决这个问题,但它会排除IDE和调试问题。
我之前见过这种情况。