go - 我应该在调用 os.removeAll 之前关闭 os.File 吗?
问题描述
所以如果我在临时目录中创建了一个临时文件,使用它,现在我需要删除它(或它们),我应该调用第一个 file.Close() 然后调用 os.RemoveAll,或者如果我调用 os.RemoveAll 它没有必要关闭文件吗?那么文件描述符是否被释放?
解决方案
在 linux 上,删除文件会导致其名称从文件系统中删除,但是当您仍然有一个打开的文件描述符时,存储块将保留在磁盘上,并且仅在该文件描述符(以及在该文件上打开的任何其他文件描述符)时删除已经关了。见https://linux.die.net/man/2/unlink
在 go 中,打开的文件描述符不会因为您调用os.RemoveAll()
包含该文件的目录而关闭。
我相信 microsoft windows 的工作方式不同:我认为当您尝试删除当前正在写入的文件时会出现错误。那可能是错误的,我不是Windows专家。但同样,打开的文件描述符不会自动关闭。
推荐阅读
- sql - 匹配具有相同列的多个表之间的键值对
- javascript - 使用混淆的javascript生成字符串
- java - 我无法使用 FCM 接收到我的设备的通知
- excel - 来自外部电子表格的 Vlookup 总和
- php - Laravel 5.7 分页漂亮的 URL
- unit-testing - 带有 Spock 框架模拟“_”选项的 Groovy 扩展运算符
- android - Mono Android 和 Xamarin.android 之间的区别
- rest - 是否建议将所有场景响应数据保存到外部文件中并在代码内部而不是功能文件中读取?
- angular - 同时添加/删除元素时列表项动画不起作用
- python - 如何通过 python 请求登录到 Iptorrents.com