為什麼windows里打開的文件不能重命名而Mac OS可以?

謝謝大家回答。此問題主要針對的是類似於pdf之類的文本文檔,本人還在學校讀書,經常看文獻,有時候看到某篇文獻很有用或者需要簡單分類需要在文件名上做出標註,因此有了這個問題。在windows上需要關掉文檔,改完名再打開,這樣就比較麻煩,而我用mac os可以直接改,我不是想黑誰,只是針對這樣一個問題有一個具體的疑問而已。 總之謝謝各位回答。


先問是不是,再問為什麼(

Windows下應用程序可以選擇使用獨佔或非獨佔方式打開文件。具體地說,就是 CreateFile function 中的 dwShareMode 參數:

其中,文件是否能夠重命名是由是否設置了 FILE_SHARE_DELETE 決定的。

---------------- 分割線 ----------------

如果是獨佔的話,示例代碼如下:

#include &
int main() {
CreateFile("foo.txt", GENERIC_READ, 0, nullptr, OPEN_ALWAYS, 0, nullptr);
while(true);
}

運行後嘗試重命名 foo.txt,此時會提示:

如果將代碼改成允許共享的話:

#include &
int main() {
CreateFile("foo.txt", GENERIC_READ, FILE_SHARE_DELETE, nullptr, OPEN_ALWAYS, 0, nullptr);
while(true);
}

再次運行,嘗試修改 foo.txt 的名稱則能夠成功。

---------------- 分割線 ----------------

許多軟體會獨佔文件,所以看起來打開的文件無法被重命名(當然這樣也避免了打開的文件被錯誤使用)。當然,如果是像 notepad 那樣比較簡單的應用,應該是只在打開和保存文件時才會真正「打開」文件,於是就沒有獨佔的問題了。


先問對不對,再問為什麼。

NTFS更高級。

NTFS打開文件的時候,可以指定是否鎖定這個文件的某些特定功能用途。具體由打開文件的程序去決定。

例如,如果打開文件的時候明確共享了Delete功能,則此文件可以改名、可以刪除,而文件本體在被關閉之前都不會被影響使用。

HFS的方式是映射了文件的一個ID用於訪問保持。修改名字是不會修改ID的,因此是允許的。


*nix兼容文件系統默認實現這樣的行為,——文件描述符引用計數,計數不清零的話刪除行為不會真正發生。可以嘗試打開一個視頻然後刪除視頻文件,播放應該是毫無問題的(不是預讀)。

NTFS的行為其他答案已經說得很清楚了。另外,這與高級不高級無關,兩種實現對用戶來說都有對應的便利與不便的地方,而且*nix系統的很多行為都依賴於這種計數。

====

看到有些答主的回答下面產生了爭議,補充一點吧。*nix文件系統這樣實現最大的好處是系統更新的便利,可以在服務不間斷的前提下更新系統。被調用的庫,甚至正在運行中的可執行文件都可以直接被替換,在適當的時候再重啟服務,但並不代表這樣做一定不會出問題(其實還是比較容易出問題的,尤其是大型軟體可能並不會預讀所有的模塊,這時候中途更新,萬一行為不一致了,GG)。

win文件系統默認行為則確保了獨佔的文件一定不會被刪除,移動,重命名(這幾個其實是一個語義),保障不會出現意外,但是就像題主說的那樣有時候會存在不便。


試試用記事本打開一個txt然後重命名


麻煩 黑要黑得專業一點。

你這種問題只要舉個反例就直接打臉了。

notepad++打開文件就可以直接重命名文件。

notepad++重新獲得焦點得時候 會自動 檢查文件是否被重命名或者被更改過。


類Unix文件系統都是通過iNode號來識別文件的,和文件名和文件路徑沒有關係。您可以試著把正在使用的文件拖到廢紙簍里。


只能說OSX的文件管理機制簡單粗暴,文件都是有ID的。

從用戶的角度來說Mac更方便,從開發者角度說當然是增加工作量吧。


Exe文件被執行的時候,確實不能修改,至於其他文件不能修改,微軟表示這鍋我不背。。。


推薦閱讀:

Windows PC 不裝任何殺毒軟體和防火牆真的沒問題么?
蘋果專賣店售後服務有沒有權力擅自刪除用戶的盜版 Windows 系統?
為什麼電腦使用一段時間後一定會變慢?有沒有辦法能讓慢掉的電腦重新快起來?
操作系統的字符集是個什麼類型的文件?
Windows XP 已是 12 年前的舊操作系統了,為何還有大量用戶不願放棄?

TAG:macOS | MicrosoftWindows | 操作系統 |