1

例えば、

#!/usr/bin/perl

open FILE1, '>out/existing_file1.txt'; 
open FILE2, '>out/existing_file2.txt'; 
open FILE3, '>out/existing_file3.txt'; 

#!/usr/bin/perl

if (-d out) {
    system('rm -f out/*');
}

open FILE1, '>out/new_file1.txt'; 
open FILE2, '>out/new_file2.txt'; 
open FILE3, '>out/new_file3.txt'; 

最初の例では、ファイルをクローバーします(長さをゼロに切り捨てます)。2番目では、ディレクトリをクリーンアップしてから、新しいファイルを作成します。

2番目の方法(ディレクトリをクリーンアップする方法)は冗長で不要のようです。これを行うことの唯一の利点は(私の考えでは)、アクセス許可と変更日をリセットすることです。

どちらがベストプラクティスと見なされますか?(質問は衒学的であり、最初の例がより一般的であると思います。)


編集:私が尋ねる理由は、データを解析し、出力ファイルをディレクトリに書き込むスクリプトがあるためです-毎回同じファイル名/パスで。このスクリプトは何度も実行されます。スクリプトの開始時に(書き込み先のファイルの)ディレクトリを部分的にクリーンアップする必要があるのか​​、ファイルハンドル'>'でファイルを壊してしまうのか、興味があります。自分で特別な対策を講じることはありません。

4

1 に答える 1

2

あなたが言及したパーミッションの問題を除いて、2つの方法の唯一の重要な違いは、これを行っている間に別のプロセスが出力ファイルの1つを開いているかどうかです。ファイルを削除してから再作成すると、他のプロセスは引き続き元のファイルのデータを確認します。ファイルをクローバーすると、他のプロセスはファイルの内容がすぐに変更されるのを確認します(ただし、バッファー付きI / Oを使用している場合は、バッファーを補充する必要があるまで気付かない場合があります)。

ファイルを削除すると、含まれているディレクトリの変更時刻も更新されます。

于 2013-03-26T16:36:49.463 に答える