2010-10-20 85 views
0

我在XP上運行Python 2.6.2。我有大量文本文件(100k +)分佈在多個文件夾中,我想將它們合併到外部驅動器上的單個文件夾中。python on xp:errno 13權限被拒絕 - 限制文件夾中的文件數量?

我試過使用shutil.copy()和shutil.copytree()和distutils.file_util.copy_file()將文件從源文件複製到目標文件。這些方法都沒有成功複製源文件夾中的所有文件,並且每次嘗試都以IOError Errno 13權限被拒絕結束,我無法創建新的目標文件。

我注意到,無論使用哪個源文件夾,我使用的所有目標文件夾都以13106個文件結束。我無法打開任何新的文件在有這麼多(或多個文件)的文件夾中寫入,這可能是爲什麼我要Errno 13.

我很感激關於是否以及爲何發生此問題的建議。

千恩萬謝, 缺口

+0

在問題中提供您的代碼。 – pyfunc 2010-10-20 22:51:06

回答

2

您是否使用FAT32? FAT32文件夾中的最大目錄條目數是65.534。如果文件名長度超過8.3,則需要多個目錄條目。如果您以13,106表示,這表明每個文件名都足夠長以至於需要五個目錄條目。

解決方案:使用NTFS卷;它沒有每個文件夾的限制,並且本地支持長文件名(即不使用多個8.3條目)。 NTFS捲上的文件總數限制在43億左右,但可以以任意組合放入文件夾中。

+1

添加鏈接:http://technet.microsoft.com/en-us/library/bb457112。aspx – pyfunc 2010-10-20 22:48:35

+0

感謝您提供非常有用的答案和鏈接。當我得到另一個外部驅動器或有機會重新格式化我的當前驅動器時,我會記得使用NTFS。在那之前,我想我需要引入一個目錄結構來分割和征服複製。 – nswitanek 2010-10-21 02:20:19

0

我不會在一個文件夾中有很多文件,這是一個維護噩夢。但如果你需要的話,不要在FAT上這樣做:你有最大的。 64K文件在FAT文件夾中。

讀取錯誤消息

您的具體問題也可能是,你作爲錯誤信息顯示均創下一個文件,你不能訪問。沒有理由相信在這種情況發生之前文件的數量應該改變。畢竟這是一臺電腦,而你正在重複相同的操作。

+0

感謝您的有益建議。我也認爲我可能只是在步驟13106碰到同一個文件,但是當複製幾個不同的目錄時,我在相同數量的文件中出現了問題,所以我認爲問題在於長文件名,正如上面的回答中所建議的那樣。 – nswitanek 2010-10-21 02:23:31

+0

好的,那麼。分而治之:-) – knitti 2010-10-21 05:23:06

0

我預測你的外部驅動器的格式是32,而你寫入的文件名是45個字符左右。

FAT32在目錄中只能有65536個目錄條目。長文件名每個使用多個目錄條目。和「。」總是佔用一個條目。您可以寫65536/5 - 1 = 13106條目強烈建議您的文件名每個佔用5個條目,並且您有一個FAT32文件系統。這是因爲存在使用16位數字作爲目錄條目偏移量的代碼。

此外,你做而不是想要通過FAT中的多1000條目錄進行搜索 - 搜索是線性的。即fopen(some_file)會導致操作系統從頭開始每次直線前進文件列表,直到它找到some_file或在列表的末尾移動。

簡短回答:目錄是一件好事。

+0

照亮答案,謝謝。是的,文件名是40或41個字符長,包括文件擴展名後綴,我認爲外部驅動器確實格式化爲FAT32。我曾認爲避免目錄結構會更容易,但顯然存在我不知道的重要折衷。再次感謝。 – nswitanek 2010-10-21 02:15:55