我正在将应用程序启动器编写为C#,VS 2017中的Window应用程序。目前,这段代码存在问题:
if (System.IO.Directory.Exists(extractPath))
{
string[] files = System.IO.Directory.GetFiles(extractPath);
string[] dirs = Directory.GetDirectories(extractPath);
// Copy the files and overwrite destination files if they already exist.
foreach (string s in files)
{
// Use static Path methods to extract only the file name from the path.
var fileName = System.IO.Path.GetFileName(s);
var destFile = System.IO.Path.Combine(oldPath, fileName);
System.IO.File.Move(s, destFile);
}
foreach (string dir in dirs)
{
//var dirSplit = dir.Split('\\');
//var last = dirSplit.Last();
//if (last != "Resources")
//{
var fileName = System.IO.Path.GetFileName(dir);
var destFile = System.IO.Path.Combine(oldPath, fileName);
System.IO.Directory.Move(dir, destFile);
//}
}
}
我得知众所周知的错误 “该进程无法访问文件'XXX',因为它正由另一个进程使用。”
我一直在寻找修复它的解决方案,在MSDN和StackOvervflow上找到了几个,但我的问题非常具体。我不能只将一个目录移动到另一个目录,这是我的主应用程序的Resources文件夹:
以下是我解释为什么问题具体的原因:
从父目录移动其他文件我没有任何问题。仅当循环到达/ Resources目录时才会发生错误。
起初,我认为它正在被VS实体使用,我已经打开了主应用程序。关闭VS和杀戮过程后没有任何改变。
我已将整个项目复制并移动到另一个目录。从未在VS中打开它,也没有通过* .exe文件启动它,以确保任何进程都不使用新的复制目录中的任何文件。
最后,我重新启动了PC。
我知道当您尝试删除/移动文件时,此错误非常常见,但在我的情况下,我确信它仅由我的启动器应用程序使用。这是一个稍长的示例代码,用于显示我实际执行的文件操作:
private void RozpakujRepo()
{
string oldPath = @"path\Debug Kopia\Old";
string extractPath = @"path\Debug Kopia";
var tempPath = @"path\ZipRepo\RexTempRepo.zip";
if (System.IO.File.Exists(tempPath) == true)
{
System.IO.File.Delete(tempPath);
}
System.IO.Compression.ZipFile.CreateFromDirectory(extractPath, tempPath);
if (System.IO.Directory.Exists(oldPath))
{
DeleteDirectory(oldPath);
}
if (!System.IO.Directory.Exists(oldPath))
{
System.IO.Directory.CreateDirectory(oldPath);
}
if (System.IO.Directory.Exists(extractPath))
{
string[] files = System.IO.Directory.GetFiles(extractPath);
string[] dirs = Directory.GetDirectories(extractPath);
// Copy the files and overwrite destination files if they already exist.
foreach (string s in files)
{
// Use static Path methods to extract only the file name from the path.
var fileName = System.IO.Path.GetFileName(s);
var destFile = System.IO.Path.Combine(oldPath, fileName);
System.IO.File.Move(s, destFile);
}
foreach (string dir in dirs)
{
//var dirSplit = dir.Split('\\');
//var last = dirSplit.Last();
//if (last != "Resources")
//{
var fileName = System.IO.Path.GetFileName(dir);
var destFile = System.IO.Path.Combine(oldPath, fileName);
System.IO.Directory.Move(dir, destFile);
//}
}
}
string zipPath = @"path\ZipRepo\RexRepo.zip";
ZipFile.ExtractToDirectory(zipPath, extractPath);
}
现在,我的问题:
它可以与文件类型(.png,.ico,.bmp)相关吗?
是否与事实相关,那些资源文件正在被使用,例如我的主应用程序中的.exe文件图标?或者仅仅因为那些是资源文件?
还有什么我错过的以及可能导致错误的原因吗?
编辑:
澄清: 有2个应用程序:
主要申请
启动器应用程序(启动主应用程序)
资源文件夹是主应用程序/资源,我正在进行应用程序版本更新时移动它。