我正在尝试使用Apple文件系统(APFS)跟踪Perl 在macOS 上重命名的问题.我已经能够使用perls将其复制到至少5.12.3,但我的所有内容都是使用Apple LLVM版本9.1.0(clang-902.0.39.1)编译的.这些相同的perls在FAT或HFS +文件系统中没有这个问题.其他地方我没有注意到这个问题.
第一次运行它.我最终得到了一个Changes和一个Changes.bak.这正是我的预期.
再次运行它.您最终获得了更改和更改3文件.没有Changes.bak.这很奇怪.
再次运行它.我最终得到了一个Changes文件,Changes.bak和Changes 3.
再次运行它.我最终得到了一个Changes文件,Changes 3和Changes 4.再一次,没有Changes.bak.
如果我删除了这print条线,我无法理解这一点("医生,当我这样移动我的手臂时会疼,").
我重新命令文件句柄打开和关闭,但似乎没有解决任何问题.
我认为在文件系统级别发生了一些事情.所以我真的有两个问题:
这是一个错误,在什么级别?rename在我开始弄乱文件句柄之前,是否保证无法完成它需要做的任何事情?
我想读取旧文件并创建一个在中间插入一些数据的新文件.复制标题,插入新行,将所有旧行输出到新文件中.我可以写一个临时文件并稍后再移动,但我还做其他蠢事吗?
如果您可以重现此行为但不知道,请发表评论.也许我的系统还有其他奇怪之处.
my $changes = "Changes";
my $bak = $changes . ".bak";
rename $changes, $bak or die "Could not backup $changes. $!\n";
open my $in, '<', $bak or die "Could not read old $changes file! $!\n";
open my $out, ">", $changes;
# comment this print line and there's no problem
print {$out} 'Hello';
close $out;
close $in;
Run Code Online (Sandbox Code Playgroud)
我知道这是一个老问题,但这可能与苹果文件系统处理大约一年前的一个错误有关。我们遇到了文件元数据(mtime?)在某些情况下未正确设置的问题。
当您使用 perl、python、node 等遇到此类问题时,请尝试用不同的语言执行相同的操作,看看是否会获得相同的行为。如果是这样,这可能是操作系统错误(无论如何,大多数脚本语言通常都是 C 库的薄包装器)。
干杯。
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |