首页 > 解决方案 > 我应该在调用 os.removeAll 之前关闭 os.File 吗?

问题描述

所以如果我在临时目录中创建了一个临时文件,使用它,现在我需要删除它(或它们),我应该调用第一个 file.Close() 然后调用 os.RemoveAll,或者如果我调用 os.RemoveAll 它没有必要关闭文件吗?那么文件描述符是否被释放?

标签: gofile-io

解决方案


在 linux 上,删除文件会导致其名称从文件系统中删除,但是当您仍然有一个打开的文件描述符时,存储块将保留在磁盘上,并且仅在该文件描述符(以及在该文件上打开的任何其他文件描述符)时删除已经关了。见https://linux.die.net/man/2/unlink

在 go 中,打开的文件描述符不会因为您调用os.RemoveAll()包含该文件的目录而关闭。

我相信 microsoft windows 的工作方式不同:我认为当您尝试删除当前正在写入的文件时会出现错误。那可能是错误的,我不是Windows专家。但同样,打开的文件描述符不会自动关闭。


推荐阅读