应用程序:Application Launcher,无法移动目录,它被另一个进程

时间:2018-05-23 08:34:19

标签: c# .net

我正在将应用程序启动器编写为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 folder

以下是我解释为什么问题具体的原因:

  1. 从父目录移动其他文件我没有任何问题。仅当循环到达/ Resources目录时才会发生错误。

  2. 起初,我认为它正在被VS实体使用,我已经打开了主应用程序。关闭VS和杀戮过程后没有任何改变。

  3. 我已将整个项目复制并移动到另一个目录。从未在VS中打开它,也没有通过* .exe文件启动它,以确保任何进程都不使用新的复制目录中的任何文件。

  4. 最后,我重新启动了PC。

  5. 我知道当您尝试删除/移动文件时,此错误非常常见,但在我的情况下,我确信它仅由我的启动器应用程序使用。这是一个稍长的示例代码,用于显示我实际执行的文件操作:

    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);
        }
    

    现在,我的问题:

    1. 它可以与文件类型(.png,.ico,.bmp)相关吗?

    2. 是否与事实相关,那些资源文件正在被使用,例如我的主应用程序中的.exe文件图标?或者仅仅因为那些是资源文件?

    3. 还有什么我错过的以及可能导致错误的原因吗?

    4. 编辑:

      澄清: 有2个应用程序:

      1. 主要申请

      2. 启动器应用程序(启动主应用程序)

      3. 资源文件夹是主应用程序/资源,我正在进行应用程序版本更新时移动它。

0 个答案:

没有答案