為什麼 Windows 在刪除正在使用的文件時會提示「文件已在 XX 中打開」並拒絕刪除,而安卓不會?

比如在聽歌佔用文件,Windows 會提示文件正在使用,而安卓可以即時刪除文件,但奇怪的是在安卓刪除文件的時候,歌曲會繼續播放,直到直到歌曲播放停止或者切換歌曲。

(測試文本類的文件可以同時在兩個程序中打開,以最後一次編輯為準,同時可以做到在打開的時候刪除)


進程打開文件CreateFile的時候只要標識FILE_SHARE_DELETE就一樣可以允許別的進程刪除該文件。

CreateFile function (Windows)


Windows裡面,app打開一個文件之後,要不要給文件上鎖(從而阻止你刪除和修改),是app自己可以控制的事情,不是Windows管的。


Windows中刪除文件是真刪除,如果文件正在被使用,就會刪除失敗。

UNIX中刪除文件實質上是Unlink,即文件的inode引用計數減一(可以將文件系統中,該文件的每個硬鏈接視作一個引用計數;所有進程中,每個打開該文件的文件描述符視作一個引用計數)。如果文件正在被使用,則要等到所有的文件描述符都關閉,即inode引用計數變為0,文件才會真的消失。

此外,文件重命名也會有類似的現象,這裡用兩個終端中的操作來表示:

Terminal 1:

$ cat &> foo #創建foobar文件

輸入幾行文字

Terminal 2:

$ mv foo bar #將foo重命名為bar

Terminal 1:

在正在運行的cat中繼續輸入幾行文字,最後按Ctrl-D結束

這些操作之後,bar文件會完整地儲存剛才輸入的所有文字。二者區別的本質是,Unix的文件操作行為和Windows中的有區別。Windows以文件名定義一個文件,而Unix以inode定義一個普通文件。

跨文件系統的mv操作,我沒有研究過,請各位大神前來解答。

Reference

rm

unlink

rename


你怎麼不說 安卓上的很多App 根本就不能刪除,何況是文件

人人都要root?


手機軟體播放音樂可能一次性把音頻讀入並緩存,之後釋放文件。所以,手機播放音樂時刪除並不會有影響。

猜測。我曾經這樣實現過音樂播放功能。


說的模糊一點就是不同的許可權機制而有的不同結果


有點奇怪為啥題主會問這個問題。 你在安卓上刪除文件,windows上為啥會出提示框呢?


推薦閱讀:

為什麼 Windows 10 計算器應用中含開方計算結果不準確?
聽說很多微軟員工自己不用 Windows,是真的嗎?
為什麼蘋果美國工廠的 iMac 上運行的是 Windows 系統?
有哪些關於 Windows 下 C++ 程序調試的書推薦?

TAG:MicrosoftWindows | 文件系統 | Android | 文件管理 |