Perl - 文件删除没有发生

时间:2013-03-04 21:20:14

标签: perl rename unlink

我有一个文件,我必须添加2行。 为此我打开文件,读取行,添加新行并将文件保存为新的临时文件。现在我想删除原始文件并将新文件重命名为原始文件名。但不知怎的,它没有发生。

unlink $file;
rename($outfile,"D:/Test/Original.cxx") or die;

这就是我刚才尝试过的方法。 任何帮助!

2 个答案:

答案 0 :(得分:1)

如果这仍然无效,你应该知道为什么

unlink($file) && rename($outfile,$file) or die "$! $file";

答案 1 :(得分:1)

您应该尝试测试命令的输出。 unlink命令返回已删除的文件数。您可以使用此信息来测试文件是否已删除:

 unlink $file or die qq(Cannot delete file "$file"\n;
 rename $outfile, $file or die qq(Cannot rename file "$outfile" to "$file\n);

这会让您了解unlink是失败还是rename。该文件仍有可能仍处于打开状态。如果要在文件中添加行,请确保先使用close关闭文件句柄:

open my $in_fh, "<", $file or die qq(Cannot open "$file" for reading\n);
open my $out_fh, ">", $outfile or die qq(Cannot open file "$outfile" for writing\n)

...   #What ever you're doing

close $in_fh;     #Close your files, so nothing is holding them open.
close $out_fh;
unlink $file or qq(Cannot delete file "$file"\n);
rename $outfile, $file or qq(Cannot rename "$outfile" to "$file"\n);

在Windows上,在执行任何操作之前关闭所有文件句柄尤为重要。即使读取也会阻止您对文件执行任何操作。