将图像上传到我的服务器后,我的代码会将其移动到用户详细信息所指定的特定文件夹中。有时我认为它试图移动文件太快或上传文件仍然在使用,所以9/10该功能将不会执行移动。
有没有办法添加'等待'或方法来检查文件是否正在使用并且可能执行while循环直到允许移动文件?
我的控制器中的当前移动功能:
while (!File.Exists(uploadedPath))
{
}
File.Move(uploadedPath, savePath);
PS。我打算添加一个计数器,以确保while循环不会卡住并超时。
答案 0 :(得分:3)
如果您可以控制接收文件的代码,我会更新它以在完全接收文件时通知移动代码。或者,我会从那里移动文件,甚至将文件保存在最终的位置。
否则,它将是一个黑客。你需要
有些事情:
bool success = false;
for (var count = 0; !success && count < 10; ++count)
{
try
{
File.Move(uploadedPath, savePath);
success = true;
}
catch (IOException)
{
Thread.Wait(1000);
}
}
当它根本无法移动文件时,您还需要处理这种情况。所以这是一个黑客攻击,如果有其他方法通知移动代码,则不应该这样做。
另请注意:
来自File.Move msdn:
如果您尝试将文件跨磁盘卷移动并且该文件正在使用中, 该文件被复制到目标,但不会从中删除 源。
表示移动后文件将保留在接收的文件目录中。
答案 1 :(得分:0)
UploadFile和MoveFile 2是彼此独立的不同组件。如果是这样,我认为这不是一个好的架构。我会推荐一种方法,以便一旦部分完成,上传文件将控件传递给MoveFile。这样,您可以避免多个进程尝试访问同一文件。