我使用File.Move
将大约2GB的大文件从目录移动到另一个目录。监视desitnation文件夹,如果有任何新文件,它将被上传到CDN。但我们经历了一些部分文件上传到CDN,这意味着,当同一文件从源目录移动到目标目录时,相应的文件被上传到CDN。所以,我需要知道File.Move是否锁定文件目标文件夹,直到文件完成移动?
答案 0 :(得分:1)
您的问题是目标文件夹上的月亮。
由于你有一个大文件,复制它需要时间,所以发生的事情是:
对此的一个缓解是,假设您的监控系统搜索具有一些扩展的文件 - 将MyBigFile.ext
移动到MyBigFile.ext.tmp
。完成后,将其重命名为MyBigFile.ext
,因此当监控启动时,它将具有完整的文件
答案 1 :(得分:1)
为避免部分上传到CDN,您可以做的是在移动CDN时首先隐藏它,并在完成后取消隐藏它。如果文件仍然隐藏,请将监控工具 不将其转移到CDN。
或者您可以将其锁定,以便其他进程(这是您的监视工具 - CuteFTP)无法访问目标文件,直到流已经完成。
e.g。
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);
}
}