今天又遇到一個問題,在寫一個簡單的文件備份的腳本中,使用shutil.copyfile的時候出現了No such file or dir的錯誤。我排查了一遍之后,發現是文件路徑太長了導致Windows下不能查詢到文件,也就無從談起了復制,移動,刪除等文件操作了。
經過一番查找之后,發現了兩個解決方法:
2、這個解決方法是想辦法告訴電腦我的路徑長度很長。首先我查詢了windows下文件路徑的最大長度是多少,查到的結果是260.這對於絕大多數情況都足夠用了,但是文件路徑長的問題還是存在的。然后就看到了UNC的定義,原來windows下的文件路徑的長度最大可以是3萬多的長度,具體多少記不清了哈哈哈。只要在絕對路徑的前面加上“\\?\”就能告訴計算機我需要使用最大的路徑長度,這樣就不會出現路徑太長而導致的無法操作的問題了。
對於第二種解決方案,還存在一個問題,對於共享計算機目錄下該怎么操作呢,因為我們知道,在共享目錄下你訪問其他電腦的文件的方式都是\\+計算機名+路徑(例如\\hexiaoqi\test),對於這樣的目錄你如果前面直接加\\?\是會報錯的。因為無法正確解析路徑。那么對於這種情況應該怎么操作呢?在共享路徑前面加上\\?\UNC\這樣就ok了,注意這樣拼接的時候需要對把共享計算機的前面的\\去掉。此處舉一個例子(\\?\UNC\hexiaoqi\test)。