1

我有一个我认为非常简单的文件移动器脚本。它检查文件并将其移动到新目录(如果存在):

if (File.Exists(_collection[x,0]))
{
    System.IO.File.Move(_collection[x, 0], _moveTo);
    MessageBox.Show("File moved because it was stale.");
}

它通过了该文件是否存在的检查,但是在尝试移动它时会在下一行出现错误,说明该文件正在被另一个进程使用。我只能假设 File.Exists 导致它以某种方式挂断,但无法从遇到此问题的其他任何人那里找到解决方案。

4

2 回答 2

1

试试这个代码:

    string filePathNameToMove = "";
    string directoryPathToMove = "";

    if (File.Exists(filePathNameToMove))
    {
        string destinationFilePathName = 
               Path.Combine(directoryPathToMove, Path.GetFileName(filePathNameToMove));
        if (!File.Exists(destinationFilePathName))
        {
            try
            {
                File.Move(filePathNameToMove, destinationFilePathName);
                Console.WriteLine("File Moved!");
            }
            catch (Exception e)
            {
                Console.WriteLine("File Not Moved! Error:" + e.Message);

            }
        }
    }
于 2017-07-09T10:18:39.917 回答
1

万一其他人有这个问题。就我而言,该文件已在 Excel 中打开,并且 Excel 在终止后从未被垃圾收集。所以操作系统仍然认为该文件正在被访问。我做了以下粗略的操作,但它有效。

                for (int i = 1; i > 0; i++)
                {
                     try
                     {
                         File.Move(sourceFileName, destinationFileName);
                         break;
                     } catch
                     {
                         GC.Collect();
                     }
                }
于 2019-03-20T16:32:22.727 回答