在我們使用Windows的過程中,會遇到各種各樣的問題。即使是最簡單的刪除文件也可能遇到麻煩,要麼系統提示“文件正在被另一個人或程序使用”,要麼就是報告“訪問被拒絕”……如果你也遇到過這種情況,不妨看看造成這些問題的原因是什麼?
原因一:文件正在使用中
在刪除文件時,經常會遇到的一個問題是,文件正在使用,無法刪除。如果試圖刪除以獨占訪問而不是以共享訪問方式打開,並且正在使用中的文件時,系統就會出現錯誤提示:“無法刪除xxx:文件正在被另一個人或程序使用”。而另一種情況則是,能夠使用刪除命令刪除文件,但在打開文件的進程釋放該文件之前,文件實際上並未刪除。
要解決上述問題,需要確定擁有文件打開句柄的進程,然後關閉此進程。在以前的Windows中,我們可以使用資源工具包的Oh.exe。但在XP中,安裝好的Support Tools卻不帶Oh.exe。不過,XP提供了一個新的Openfiles.exe命令行工具,它能夠報告進程打開的各個文件。與Oh.exe相似,Openfiles.exe也要求打開系統內核監視,這會消耗一些內存,並降低系統操作的性能。打開系統監視的命令是“Openfiles/localon”,它會啟用系統全局標志“維護對象列表”,需重新啟動系統才能生效。重新啟動系統後,在命令提示符下執行不帶參數的“Openfiles”,即可看到各個進程打開文件的清單。
原因二:文件系統損壞
磁盤上的壞區、其他硬件
故障或者軟件錯誤都可能會損壞文件系統,使文件出現問題而無法刪除。典型操作失敗的方式可能各不相同,當檢測到文件系統損壞時,通常會收到一條提示運行Chkdsk的信息。
如果遇到這種情況,可以在磁盤卷上運行Chkdsk實用工具以糾正任何存在的錯誤。根據損壞的性質,Chkdsk也許能夠恢復文件數據,也許無法恢復,但Chkdsk可以使文件系統返回到一種在內部一致的狀態。有關Chkdsk實用工具的命令及參數,可以在命令提示符下執行“Chkdsk/?”查閱。
原因三:文件使用了存取控制列表
如果某個文件使用了存取控制列表(Access ControlList,簡稱ACL),而操作者又沒有相應的權限,那麼刪除文件時就可能出現“訪問被拒絕”的提示。
通常情況下,管理員具有取得任何文件所有權的隱含能力,文件所有者也具有修改文件權限的隱含能力。不過,這些默認的權限是可以被修改的。
要解決因ACL導致文件無法刪除的問題,就必須以具有相應權限的用戶身份登錄,或者是賦予自己刪除文件的權限,然後才能刪除文件。要注意的是,操作者必須擁有這些文件的所有權才能更改權限。如果是因為文件使用了不規范的ACL而不能使用某些安全工具顯示或修改其權限時,可以嘗試使用命令行工具Cacls.exe進行修改。
原因四:文件名使用了一個保留名稱
眾所周知,像AUX、LPT1這樣的名稱是為舊式DOS設備保留的。為了向後兼容,在Windows中不允許使用這些文件名,也不能使用典型的Win32文件調用來創建它們。反之,如果文件名是Win32命名空間中的一個保留名稱,則同樣可能無法刪除此文件。
要解決此類問題,可以在Linux或其他非Windows的
操作系統下重命名或刪除該文件。另外,如果能夠使用特定的語法指定到該文件的路徑,也可以使用一些內置的命令繞過典型的Win32保留名稱檢查。例如,在WindowsXP中使用以下命令,可以刪除名為“lpt1”的文件(Del命令後面加上“?”來避免Windows檢查文件名的合法性):Del c:[/URL]文件路徑lpt1。
原因五:無效的文件名稱
如果文件名中包括一個無效名稱,例如文件名有一個尾隨空格,或一個尾隨句點,或者文件名僅由一個空格組成,同樣可能無法刪除該文件。值得一提的是,如果使用典型的Win32語法打開名稱中有尾隨空格或尾隨句點的文件,則尾隨空格或句點在打開實際文件之前會被去掉。因此,如果在同一個文件夾中有兩個分別名為“File.txt”和“File.txt”的文件(注意第二個文件名後面的空格),當使用標准Win32調用打開第二個文件時,實際上會打開第一個文件。同樣,如果文件的名稱僅是“”(一個空格字符),當嘗試使用標准Win32調用打開它時,實際上會打開該文件的父文件夾。在此情況下,如果嘗試更改這些文件上的安全設置,就有可能會意外更改其他文件上的設置。
與解決文件名使用保留名稱的方法類似,可以使用一種適當的內部語法刪除此文件。例如要刪除包含尾隨空格的文件,可以使用如下命令:Del c:文件路徑(尾隨空格的文件名)
原因六:文件路徑太深無法訪問
文件位於比最大路徑字符數(MAX_PATH)更深的路徑中,可能導致文件無法訪問,當然,這種情況較為少見。如果路徑深的原因是文件夾名稱太長,最簡便的解決方案是使用自動生成的8.3名稱訪問該文件。如果8.3路徑也太長,可以從根文件夾開始重命名文件夾,縮短它們的名稱,以使目標文件的路徑深度不超過MAX_PATH。若是文件的深度超過128個文件夾,可以通過創建一個網絡共享,使其位於文件夾樹中盡可能深的位置,然後通過訪問此共享來訪問文件。
一般情況下,如果遇到因文件路徑太深無法訪問的情況,可以通過使用創建文件的軟件來管理這些文件。也就是說,如果有一個程序,它可以創建超過MAX_PATH的文件,則我們也可以使用該程序來管理這些文件。此外,對於通過網絡共享創建的深層次結構的文件也可以通過使用同一共享來進行刪除。
前面介紹了Windows系統中文件或文件夾無法刪除的幾種原因以及解決的方法。在某些情況下,可能還會遇到上述各種原因的不同組合,使得刪除文件的過程更加復雜。這就需要讀者能夠舉一反三,靈活應用微軟提供的各種實用工具進行解決了。