是否有必要在阅读(仅)任何编程语言后关闭文件?

时间:2015-04-09 10:27:32

标签: readfile file-access

我读到一个程序应该在写入之后关闭文件,以防写入缓冲区中的数据仍然没有物理写入它。我还读到一些语言(如Python)会自动关闭超出范围的所有文件,例如程序结束时。

但是,如果我只是在阅读文件而不是以任何方式修改它,可能除了操作系统改变其最后访问日期之外,是否需要关闭它(即使程序永远不会终止,例如监视日志文件的守护进程)?

Why is it necessary to close a file after using it?一般询问文件访问,不仅仅是为了阅读。)

3 个答案:

答案 0 :(得分:5)

通常,您应该在使用完毕后关闭文件。

原因1:没有无限制的可用文件描述符 (或在windows中,概念上类似的HANDLES)。 每次访问文件资源时,即使是阅读,也会减少其他进程可用的句柄(或FD)的数量。 每次关闭句柄时,都会释放它并使其可用于其他进程。

现在考虑打开文件,读取它但不关闭它的循环的后果......

http://en.wikipedia.org/wiki/File_descriptor

https://msdn.microsoft.com/en-us/library/windows/desktop/aa364225%28v=vs.85%29.aspx

原因2:如果您正在执行除读取文件以外的任何操作,则竞争条件存在问题,如果多个进程或线程访问同一文件。 为避免这种情况,您可能会发现文件锁定。 http://en.wikipedia.org/wiki/File_locking

如果您正在读取文件,而不是之后关闭它,则其他可能尝试获取文件锁定的应用程序将被拒绝访问。

哦 - 任何没有权利杀死你的进程的人都不能删除该文件。

原因3:绝对没有理由不关闭文件。在任何语言中,这就是Python帮助懒惰程序员的原因,并且在程序员忘记的情况下自动关闭超出范围的句柄。

答案 1 :(得分:2)

是的,最好在阅读完成后关闭文件。

这是必要的,因为其他软件可能会请求对该文件的独占访问权限。如果文件仍然打开,则此类请求将失败。

答案 2 :(得分:1)

不关闭文件将导致从系统中{strong>不必要的资源(File Descriptors on Unix and Handles on windows)。特别是当某种循环中出现错误或系统从未关闭时,这一点很重要。有些语言本身管理未封闭的文件,例如,当它们用完范围时,其他语言不管或者仅在检查它时的某个随机时间(如Java中的垃圾收集器)。

想象一下,你有某种需要永远运行的系统。例如服务器。然后,未封闭的文件可以消耗越来越多的资源,直到最终所有空间都被未封闭的文件使用。

要阅读文件,您必须打开它。因此,无关于对文件执行的操作,将为文件保留空间。到目前为止,我试图解释关闭文件资源的重要性,作为程序员知道何时可以关闭对象(文件)也很重要,因为不需要进一步使用。我认为不至少知道未封闭的文件是不好的做法,如果不需要进一步使用,关闭文件是一种很好的做法。

某些应用程序还只需要访问文件,因此不需要其他应用程序打开文件。例如,当您尝试清空回收站或移动仍在Windows上打开的文件时。 (这被称为file locking)。当你仍然有文件打开窗口时,不会让你扔掉或移动文件。这只是一个例子,说明文件是否应该打开而它应该(而不是)(是)。这个例子每天都发生在我身上。