有關此錯誤的大多數C#SO問題都涉及到Streamwriter。我不相信這個問題是相關的。在Backgroundworker中重命名文件時,文件正在被「正被另一個進程使用」
我有一個WinForms應用程序。該應用程序產生一個背景工作者來做真正的工作(圖像處理),以保持響應。在一個函數中,我嘗試重命名一個目錄中的所有圖像文件(不打開它們)。我收到錯誤「該進程無法訪問該文件,因爲它正在被另一個進程使用。」「我無法追查到錯誤的來源。
在MainForm的(形式)的類 - 產卵BackgroundWorker的:
private void b_preprocessImages_Click(object sender, EventArgs e)
{
if (bgw_preprocessor.IsBusy == false)
{
bgw_preprocessor.RunWorkerAsync();
}
else
{...}
}
仍然在MainForm類 - 用於BackgroundWorker的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);
}
內部ImagePreprocessor類 - 方法BackgroundWorker的運行:
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 - method to r爲ename圖片:
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)
{
...
}
}
}
的錯誤後立即嘗試重命名的第一個文件遇到。據我所知,沒有任何文件在其他應用程序中打開。我怎樣才能解決這個問題?
使用句柄命令行工具查看哪些進程對這些文件具有保留。 https://technet.microsoft.com/en-us/sysinternals/handle.aspx – Cobster
這個問題很可能是你在你的應用程序**中使用了這個文件,而不是其他應用程序。你忘了關閉它。 – Sakura
我根本沒有打開任何文件的代碼 - 到目前爲止,只有獲取文件名,計數文件,重命名它們等。@Cobster我會看到我可以找到與該處理工具。 – natedogg