2011-04-24 53 views
2

如何关闭文件并将其删除?删除c中的文件

我有以下代码:

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

现在我想结束filePtr和删除文件“文件名”。

我应该:

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

或者:

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

会有问题,我先做什么?

谢谢!

回答

3

这是依赖于操作系统的。在* nix上,删除打开的文件将其打开并将数据保存在磁盘上,但会从文件系统中删除文件名,并实际上删除该文件;其他一些操作系统可能不会让你删除一个打开的文件。因此建议使用前者以实现最大的便携性。

+0

所以我应该先fclose,然后删除(如果我的目标是* nix)?谢谢! – loopi 2011-04-24 09:45:35

+1

正如答案所说,* nix不关心操作的顺序。这是您必须担心的其他操作系统。 – 2011-04-24 09:46:27

+0

谢谢。我会记住这一点 – loopi 2011-04-24 09:47:12

0

你不需要fopen一个文件到remove它。但是,在linux中,如果你使用ed文件,它只会在关闭它之后被删除。您仍然可以读/写它。

+0

我想你错过了这个问题的重点...... – 2011-04-24 09:48:18

0

由于人的unlink(2)表示,(对于Unix系统):

取消链接()函数删除由它的目录和 路径命名的链接 递减文件 这是的链接数由链接引用。如果 递减将文件的链接计数 减少到零,并且没有进程 将文件打开,则与该文件相关联的所有资源 是 回收。如果一个或多个进程 在最后一个链接 被删除时打开文件,链接将被删除,但 删除该文件被延迟 ,直到所有对它的引用都已关闭为止 。

所以顺序并不重要。