2015-04-28 53 views
1

我有下面的代碼片斷,它只是獲取文件的時間戳。使用os.listdir和os.stat結果時出現WindowsError

files_list = os.listdir(os.path.join(path, folder)) 
    for files in files_list: 
    stats = os.stat(os.path.join(path, folder, files)) 

是否有可能對我來說,永遠得到下面的錯誤,因爲它似乎直覺,這是無法發現它已經剛剛在listdir同時文件,除了ofcourse的競爭條件,而這並不是我懷疑在這種情況下。

WindowsError: [Error 2] The system cannot find the file specified: 
'\\\\sftp-server.domain.com\\homes\\server\\location\\FOLDER\\FILE.PDF' 

我也想知道,如域名查找/臨時網絡問題可能會導致此錯誤嗎?例如

\\sftp-server.domain\\homes\\server\\location\\FOLDER

\\sftp-server.domain\\homes\\server\\location\\FOLDER\FILE

只是URL字符串,並沒有任何與真實文件系統遍歷。

+0

這是重新發布嗎? http://stackoverflow.com/questions/26911934/when-do-we-get-windowserror-error-2-the-system-cannot-find-the-file-specifie – fixxxer

+0

是的,所以我有同樣的問題,回來了並從未發現原因。 – Nishant

+1

當你在開始菜單的'Run'中粘貼路徑時,你能夠訪問這個文件嗎? – fixxxer

回答

0

服務器是做多線程和我們發送的一個JavaScript方法多Ajax請求到同一文件夾資源。

如果出現os.listdir事件,則首先會發生此錯誤,因爲它需要很長時間才能通過SFTP執行。在此期間os.remove發生在另一個請求中,並刪除了os.listdir結果中顯示的文件。在將os.listdir函數作爲適當的回調後,它工作得很好。

1

推測FOLDERFILE是不是真正的名字?仔細查看WindowsError報告的文件名稱。如果它們在最後一個組件中包含問號,則說明Unicode文件名存在問題。特別是,如果目錄包含Unicode字符在當前代碼頁中不可表示的文件名(例如西歐或東歐語言環境中的日語字符),則os.listdir將返回文件名,其中不可表示的Unicode字符將轉換爲?。很明顯,這些基本上不可用的名稱不能傳遞給IO函數,如openos.stat

要解決此問題,請通過將目錄作爲Unicode字符串傳遞給os.listdir來請求Unicode文件名。這些將包含正確的字符,可以傳遞給os.stat,這將在內部調用廣API:

dirname = unicode(os.path.join(path, folder), 'mbcs') 
file_list = os.listdir(dirname) 
for filename in file_list: 
    stats = os.stat(os.path.join(dirname, filename)) 
    # ... 
+0

這很有趣,但在這種情況下,它看起來不像Unicode文件名稱只是正常的甚至沒有特殊字符的東西就像「.... DENTAL \\ B3367A08.PDF」 – Nishant

相關問題