我有一个应用程序,在生成文件后,尝试使用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的任务(右键单击并执行),则所有操作都成功结束。
答案 0 :(得分:0)
尝试通过create命令文件以管理员身份运行应用程序,以管理员身份运行应用程序,而不是调用应用程序
runas.exe /savecred /user:YourUser "YourAppFullPath"