為什麼 Windows 在刪除正在使用的文件時會提示「文件已在 XX 中打開」並拒絕刪除,而安卓不會?
01-05
比如在聽歌佔用文件,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重命名為barTerminal 1:
在正在運行的cat中繼續輸入幾行文字,最後按Ctrl-D結束這些操作之後,bar文件會完整地儲存剛才輸入的所有文字。二者區別的本質是,Unix的文件操作行為和Windows中的有區別。Windows以文件名定義一個文件,而Unix以inode定義一個普通文件。
跨文件系統的mv操作,我沒有研究過,請各位大神前來解答。
Referencermunlink
rename你怎麼不說 安卓上的很多App 根本就不能刪除,何況是文件人人都要root?
手機軟體播放音樂可能一次性把音頻讀入並緩存,之後釋放文件。所以,手機播放音樂時刪除並不會有影響。
猜測。我曾經這樣實現過音樂播放功能。說的模糊一點就是不同的許可權機制而有的不同結果
有點奇怪為啥題主會問這個問題。 你在安卓上刪除文件,windows上為啥會出提示框呢?
推薦閱讀:
※為什麼 Windows 10 計算器應用中含開方計算結果不準確?
※聽說很多微軟員工自己不用 Windows,是真的嗎?
※為什麼蘋果美國工廠的 iMac 上運行的是 Windows 系統?
※有哪些關於 Windows 下 C++ 程序調試的書推薦?
TAG:MicrosoftWindows | 文件系統 | Android | 文件管理 |