我File.Move
用来将大约 2GB 的大文件从一个目录移动到另一个目录。目标文件夹被监控,如果有任何新文件,它将被上传到 CDN。但是我们经历了一些部分文件上传到 CDN,这意味着,当同一个文件从源目录移动到目标目录时,相应的文件被上传到了 CDN。所以,我需要知道 File.Move 是否会锁定文件目标文件夹,直到文件完成移动?
问问题
2290 次
2 回答
1
您的问题是目标文件夹上的监视。
由于您有一个大文件,因此复制它需要时间,所以发生的事情是:
- 你开始移动文件
- 监控系统启动并开始上传到 CDN
- 文件被部分上传
- 您完成了文件的移动。
对此的一种缓解方法是,假设您的监控系统搜索具有一些扩展名的文件 - 移动MyBigFile.ext
到MyBigFile.ext.tmp
. 完成后,将其重命名MyBigFile.ext
为
于 2013-06-13T12:45:00.063 回答
1
为了避免部分上传到 CDN,您可以做的是在移动它时先隐藏它,然后在它完全完成后取消隐藏它。如果文件仍然隐藏,请让监控工具 不要将其传输到 CDN 。
或者您可以将其锁定,以便其他进程(这是您的监控工具——CuteFTP)在流完成之前无法访问目标文件。
例如
static void Main(string[] args)
{
string sourcePath = "mytext.txt";
string destPath = @"dest\mytext.txt";
using (FileStream sourceStream = new FileStream(sourcePath, FileMode.Open))
{
using (FileStream destStream = new FileStream(destPath, FileMode.Create))
{
destStream.Lock(0, sourceStream.Length);
sourceStream.CopyTo(destStream);
}
}
if (File.Exists(sourcePath))
{
File.Delete(sourcePath);
}
}
于 2013-06-13T12:45:41.330 回答