本帖最后由 523066680 于 2025-3-7 08:01 编辑
回复 523066680
历史上还未见ms自称那款产品是 ‘windows的可靠...’,但给 robocopy 赐了一顶 ...
...
aloha20200628 发表于 2025-3-6 20:56  - use Modern::Perl;
- use File::Slurp;
- STDOUT->autoflush(1);
-
- my $src = ".\\robo_test";
- my $dst = "D:\\Temp\\robo_test";
- my $fname = "fluid-soundfont.tar.gz";
- my $target = "$dst\\$fname";
-
- # 这里模拟磁盘故障,导致部分节点写入数据为 NULL 的情况
- my $rawdata = read_file( "$src\\$fname", {binmode => ":raw"} );
- substr( $rawdata, 10240, 4, "\x00\x00\x00\x00" );
- write_file( $target, {binmode => ":raw"}, $rawdata );
-
- # 把源文件和目标文件赋予相同的 创建时间和修改时间
- system(qq(nircmd setfiletime "$src\\$fname" "06-06-2008 12:00:01" "06-06-2008 12:00:01" ));
- system(qq(nircmd setfiletime "$target" "06-06-2008 12:00:01" "06-06-2008 12:00:01" ));
-
- # “可靠” 的文件复制,基于硬盘是否可靠
- system(qq(robocopy /MIR "$src" "$dst" ));
复制代码
- # 结果
- # 总数 复制 跳过 不匹配 失败 其他
- # 目录: 1 0 1 0 0 0
- # 文件: 1 0 1 0 0 0
- # 字节: 124.25 m 0 124.25 m 0 0 0
- # 时间: 0:00:00 0:00:00 0:00:00 0:00:00
复制代码 问题复现,模拟硬盘部分区域写入为空的情况:
手动复制并创建目标文件,将内容的某一位置4个字节改为 \x00\x00\x00\x00,再将文件的创建时间和修改时间 设为一致,再次执行Robocopy,结果显示跳过该文件的复制。 |