3

ファイルを閉じて削除するにはどうすればよいですか?

次のコードがあります。

FILE *filePtr = fopen("fileName", "w");
...

ここで、filePtr を閉じて、ファイル「fileName」を削除します。

するべきか:

fclose(filePtr);
remove("fileName");

または:

remove("fileName");
fclose(filePtr);

どちらを先に行うかは重要ですか?

ありがとう!!

4

4 に答える 4

3

それはOS依存です。*nix では、開いているファイルを削除すると、ファイルは開いたままになり、データはディスク上に残りますが、ファイル システムからファイル名が削除され、閉じるときにファイルが実際に削除されます。他の一部のオペレーティング システムでは、開いているファイルをまったく削除できない場合があります。したがって、移植性を最大限に高めるには、前者をお勧めします。

于 2011-04-24T09:44:23.753 に答える
0

man unlink(2) が言うように (Unix システムの場合):

unlink() 関数は、path によって指定されたリンクをそのディレクトリから削除し、リンクによって参照されたファイルのリンク数を減らします。その減少によってファイルのリンク数がゼロになり、そのファイルを開いているプロセスがない場合、そのファイルに関連付けられているすべてのリソースが再利用されます。最後のリンクが削除されたときに 1 つ以上のプロセスがファイルを開いている場合、リンクは削除されますが、ファイルへのすべての参照が閉じられるまで、ファイルの削除は延期されます。

したがって、順序はまったく関係ありません。

于 2011-04-24T09:47:51.870 に答える
0

fcloseしてからunlinkする方が理にかなっています。

于 2011-04-24T09:45:56.863 に答える
0

fopenファイルを追加する必要はありませんremove。しかし、Linux ではremovefopened ファイルを閉じた後にのみ削除されます。あなたはまだそれに読み書きすることができます。

于 2011-04-24T09:46:50.310 に答える