Python解決超長文件路徑的文件的復制、刪除


Python解決超長文件路徑的文件的復制、刪除

今天又遇到一個問題,在寫一個簡單的文件備份的腳本中,使用shutil.copyfile的時候出現了No such file or dir的錯誤。我排查了一遍之后,發現是文件路徑太長了導致Windows下不能查詢到文件,也就無從談起了復制,移動,刪除等文件操作了。

經過一番查找之后,發現了兩個解決方法:

1、縮減文件路徑的長度,在python的pywin32模塊中有win32api的GetShortPathName這個函數,這個函數可以把你的非常長的路徑給改變,路徑長度自然變小了。然而路徑名稱也被改變了,實際應用的意義不大(因為有些文件夾的名稱雖然很長,但它都有自己代表的意義,不能輕易的更改)。(這個函數這里提出來只是為了對於那些批量處理的文件來說的,如果是少量的文件還不如自己手動更改路徑)

2、這個解決方法是想辦法告訴電腦我的路徑長度很長。首先我查詢了windows下文件路徑的最大長度是多少,查到的結果是260.這對於絕大多數情況都足夠用了,但是文件路徑長的問題還是存在的。然后就看到了UNC的定義,原來windows下的文件路徑的長度最大可以是3萬多的長度,具體多少記不清了哈哈哈。只要在絕對路徑的前面加上“\\?\就能告訴計算機我需要使用最大的路徑長度,這樣就不會出現路徑太長而導致的無法操作的問題了。

對於第二種解決方案,還存在一個問題,對於共享計算機目錄下該怎么操作呢,因為我們知道,在共享目錄下你訪問其他電腦的文件的方式都是\\+計算機名+路徑(例如\\hexiaoqi\test),對於這樣的目錄你如果前面直接加\\?\是會報錯的。因為無法正確解析路徑。那么對於這種情況應該怎么操作呢?在共享路徑前面加上\\?\UNC\這樣就ok了,注意這樣拼接的時候需要對把共享計算機的前面的\\去掉。此處舉一個例子(\\?\UNC\hexiaoqi\test)。

遇到這種問題真的難受,本來一個小腳本認為不可能出錯的,結果又花費了半天時間搞這個。絕望.jpg。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM