复制到Dropbox文件夹时修改LastWriteTime

时间:2015-02-09 15:41:40

标签: c# windows file backup dropbox

我有一个小C#脚本用于将我的开发文件夹备份到我的Dropbox文件夹,比较每个文件的源FileInfo.LastWriteTime,然后根据需要执行File.Copy。< / p>

我注意到新创建的文件不仅在预期的下一次运行中被复制,而且在之后的运行中被复制,尽管在过渡期间没有被修改过。

似乎LastModifiedDate在第一次复制每个文件时向下舍入到最接近的秒,使其显示为比下次原始文件更旧。在下一次运行时,文件会再次被复制,但现在LastModifiedDate没有向下舍入,即使文件实际被修改,所以从那时起一切都按预期工作。

任何人都可以了解这里发生的事情吗?

更新

似乎只影响某些文件类型,.png就是其中之一。使用以下代码可以证明该问题:

var source = @"c:\temp\test.png";
var target = @"C:\Users\Me\Dropbox\test.png";
Console.WriteLine(File.GetLastWriteTime(source).ToString("HH:mm:ss.fff"));
Console.WriteLine(File.GetLastWriteTime(target).ToString("HH:mm:ss.fff")); 
File.Copy(source, target, true);
Console.WriteLine(File.GetLastWriteTime(source).ToString("HH:mm:ss.fff"));
Console.WriteLine(File.GetLastWriteTime(target).ToString("HH:mm:ss.fff"));

第一次运行时,我们得到:

17:29:01.618 (source)
00:00:00.000 (target doesn't exist yet)
17:29:01.618 (source unchanged)
17:29:01.618 (target as source)

第二轮:

17:29:01.618 (source unchanged)
17:29:01.000 (target has been rounded down)
17:29:01.618 (source unchanged)
17:29:01.618 (target as source again)

第三次及以后的运行:

17:29:01.618 (source unchanged)
17:29:01.000 (target still as source - no rounding down)
17:29:01.618 (source unchanged)
17:29:01.618 (target as source)

更新

Procmon显示Dropbox.exe在初始复制后大约三秒钟执行SetBasicInformationFile操作,这似乎是在发生更改时,尽管Procmon没有将文件时间显示为毫秒。

因为它似乎只影响图形文件,我认为它与Dropbox缩略图生成有关,但我真的看不出有什么好的理由让他们这样做,特别是当他们离开时间戳时下次复制时完好无损。

2 个答案:

答案 0 :(得分:1)

当您将文件复制到Dropbox监视文件夹时,Dropbox后台同步应用程序可能会将文件上传到Dropbox。执行此操作后,它再次执行同步以使本地文件的时间与上载的文件相同。下次运行一个小提琴会话,看看上传后是否从Dropbox下载。

答案 1 :(得分:1)

好的,基于这个位

  

我有一个用于备份我的开发文件夹的C#脚本   我的Dropbox文件夹

您是否考虑过使用存档位?当文件更改时,它将获得SET,并在复制文件时取消它。 (你是你的代码,一旦完成备份就取消了一点)

请参阅http://en.wikipedia.org/wiki/Archive_bit

另外,ROBOCOPY怎么样?

http://en.wikipedia.org/wiki/Robocopy

它可能适合你,不需要代码..没有c#代码

ROBOCOPY C:\SOURCE C:\DEST /M /S
  

/ M:喜欢/ A,但是从源文件中删除Archive属性。

还有一个:)你可以CRC检查文件吗?但这会更耗时。

如果你想知道为什么文件日期时间正在改变,那么使用PROCMON来查看DROPBOX是否正在改变它,可能是时区的事情,可能只是它做的事情。 https://technet.microsoft.com/en-us/library/bb896645.aspx