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