我多次经历过以下悖论,我不明白它是如何发生的。
我打开一个很大的音乐/视频文件(比如 100 MB),当它开始播放时,我将其删除(永久删除)。尽管如此,媒体播放器仍能播放整个文件。
我猜它一开始不会缓冲整个文件,因为
- 该进程的内存使用量仅为 15 MB
- 而这无论如何都不是媒体播放器所做的。
那么这是怎么发生的呢?
答案1
具体细节取决于您的系统,但基本思想是底层文件系统不会破坏打开的文件。它会从您能看到的所有地方删除它,但实际上不会清理磁盘上的块(也不会清理指向该文件的目录结构的某些表示),直到您关闭它为止。
在 Unix 系统上,这种情况很常见:大多数 unix 文件系统在最后一个打开的文件句柄关闭之前不会清除 inode。
在 Windows 上,似乎如果打开进程为 CreateFile 调用指定了“FILE_SHARE_DELETE”(一个行为良好的程序应该这样做),则文件系统驱动程序会处理删除,但打开的文件仍然可以访问它。一旦文件的最后一个打开的 HANDLE 关闭,文件系统驱动程序就会清理该文件。