为什么 OneDrive 会更改文件大小?

mun*_*her 5 onedrive

我的任务是将实时 SharePoint 文档库迁移到另一个文档库。由于我们希望将停机时间降至最低,我已使用 OneDrive 将两个文档库同步到我的电脑,并使用 robocopy 在两个本地副本之间进行镜像。网络共享的非常常规的东西。

但是,我注意到当我重新运行镜像命令时,robocopy 再次复制了很多文件。我可以预期会有一些变化,但不会有数千变化。此外,robocopy 将文件标记为“已更改”,在我看来,这是 robocopy 的一个非常不寻常的复制原因 - 这意味着时间戳未更改,但文件的大小已更改......

进一步的诊断显示,只是再次复制了 Office 文档,例如 pptx。其他文件类型(例如 PDF 和图形文件)只需复制一次即可。

我最终将其归结为这一观察:

  1. 使用(例如)cmd.exe copy 将文件复制到 OneDrive
  2. 立即在 OneDrive 中查看文件大小,它与原始大小相符
  3. 等待 OneDrive 同步并再次检查文件大小

尺寸已改变。下面是一个 PowerShell 脚本,它复制文件、立即获取大小、等待 15 秒(用于同步)并再次获取大小。

$SourceFile = "S:\Temp\Helios\Library\Example.pptx"
$TargetFile = "C:\Users\rob.nicholson\Helios Medical Communications\Library - Documents (unused)\Example.pptx"
Copy-Item $SourceFile $TargetFile
$Length1 = (Get-Item $SourceFile).Length
$Length2 = (Get-Item $TargetFile).Length
Start-Sleep 15
$Length3 = (Get-Item $TargetFile).Length
Write-Host "Orignal size:    $Length1"
Write-Host "After copy size: $Length2"
Write-Host "After sync size: $Length3"
Run Code Online (Sandbox Code Playgroud)

这是输出:

Source size:     1996810
After copy size: 1996810
After sync size: 1997141
Run Code Online (Sandbox Code Playgroud)

谁能解释一下为什么文件大小会改变?另一个观察结果是,OneDrive 会说“正在上传”,然后立即说“正在下载”——此时文件大小发生变化。

使得在 OneDrive 上使用同步工具变得相当困难。不用说,Google Drive 或 Dropbox 不存在同样的问题。

最后一点:OneDrive“按需”已启用。

mun*_*her 4

在与 Microsoft 讨论此问题并阅读上面链接的文章后,这是“设计使然”,因为 OneDrive 会在上传后向 Office 文档添加额外的元数据,因此它们会立即上传然后下载。因此,这会改变文件的大小。对于那些可能依赖文件大小/MD5 校验和来确保文档完整性的人来说,这是一个问题。个人版本的 OneDrive 似乎不会发生这种情况,并且非 Office 文档不会更改。