File.Move only复制文件

时间:2015-03-26 14:30:13

标签: c# filesystems scheduled-tasks move

我有一个应用程序,在生成文件后,尝试使用File.Move函数将其从网络位置移动到本地文件夹。

File.Move(_backupSource + @"\" + filename, _backupDestination + @"\" + filename);

_backupSource是网络位置,_backupDestintation是本地文件夹。

文件被复制到目标位置,几天没有删除源文件,就像我使用File.Copy一样,但这个应用程序现在工作正常两个月了。

我还查看了两台服务器中的事件查看器,并没有生成异常。

¿会发生什么事?

修改 有一件事可能很重要。这个应用程序每晚由任务调度程序触发。如果我手动运行应用程序,则移动(不复制)文件

编辑2: 现在我尝试复制文件,然后使用以下方法删除文件

private static void MoveFiles(string filename)
{
    FileInfo file = new FileInfo(_backupSource + @"\" + filename);

    FileStream stream = null;

    int iteration = 0;

    file.CopyTo(_backupDestination + @"\" + filename);

    bool isUnlocked = false;
    while (!isUnlocked)
    {
        iteration++;
        try
        {
            stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
            isUnlocked = true;
        }
        catch (IOException ex)
        {
            //the file is unavailable because it is:
            //still being written to
            //or being processed by another thread
            //or does not exist (has already been processed)
            Thread.Sleep(60 * 1000);
            if (iteration > 60)
                throw ex;
            else
                EventLog.WriteEntry("DailyRestore", string.Format("Move File. Iteration number {0}", filename), EventLogEntryType.Information);

        }
        finally
        {
            if (stream != null)
                stream.Close();
        }
    }


    file.Delete();
}

在日志中可以看到应用程序每分钟尝试一小时,文件始终是“由另一个进程使用”。就像我提到的那样,这是当调度程序任务执行exe时,如果我运行手动执行exe的任务(右键单击并执行),则所有操作都成功结束。

1 个答案:

答案 0 :(得分:0)

尝试通过create命令文件以管理员身份运行应用程序,以管理员身份运行应用程序,而不是调用应用程序

  1. 创建新文本文件" start.cmd"
  2. 以文本形式打开文件并编写命令 runas.exe /savecred /user:YourUser "YourAppFullPath"
  3. 现在运行" start.cmd"一旦输入用户密码。它将被保存,直到用户更改它
  4. 然后你可以打电话给" start.cmd"而不是调用您的应用程序