瀏覽共享路徑的時候使用FindNextFile函式,有的時候函式進去后就不回傳了,然后程式永遠卡死在那里。
請問碰到這種情況該如何處理?微軟做的函式怎么那么不靠譜,怎么都應該回傳啊!
uj5u.com熱心網友回復:
上代碼, 是不是whil回圈有問題?uj5u.com熱心網友回復:
應該是對網路共享路徑支持有問題uj5u.com熱心網友回復:
很多api沒有增加超時機制, 確實比較老火uj5u.com熱心網友回復:
system("dir /b /a-d c:\\*.* >d:\\allfiles.txt");//讀檔案d:\\allfiles.txt的內容即C:\\下所有檔案的名字
system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt");
//讀檔案d:\\allfilesinsub.txt的內容即C:\\下所有檔案的名字包含子目錄
system("dir /b /ad c:\\*.* >d:\\alldirs.txt");
//讀檔案d:\\alldirs.txt的內容即C:\\下所有子目錄的名字
請記住,能用shell命令獲取檔案、檔案夾資訊或者操作檔案、檔案夾最好用shell命令獲取或者操作,而不要用各種API獲取或者操作,因為當遇到非法檔案夾名或非法檔案名或非法檔案長度、非法檔案日期、壓縮檔案、鏈接檔案、稀疏檔案……等各種意料之外的情況時,API會處理的不全面或陷入死回圈,而shell命令不會。
如果嫌system黑視窗一閃,將system("...")替換為WinExec("cmd /c ...",SW_HIDE);
uj5u.com熱心網友回復:
代碼太復雜了,上一部分#ifdef DEBUG_INFO_PROGRESS
if(NULL!=m_pFileBuffer)
m_pFileBuffer->ShowFileProgress(PROCESS_DEBUG_INFO_MSG2,(LPARAM)_T("LocalFile::Next:in"));
#endif
while(::FindNextFile(m_hFind,&m_fd))
{
#ifdef DEBUG_INFO_PROGRESS
if(NULL!=m_pFileBuffer)
m_pFileBuffer->ShowFileProgress(PROCESS_DEBUG_INFO_MSG2,(LPARAM)_T("LocalFile::Next:out1"));//還有檔案時
#endif
/*...............*/
}
#ifdef DEBUG_INFO_PROGRESS
if(NULL!=m_pFileBuffer)
m_pFileBuffer->ShowFileProgress(PROCESS_DEBUG_INFO_MSG2,(LPARAM)_T("LocalFile::Next:out2"));//結束時
#endif
有問題后,在函式前后加了些資訊顯示,于是就定位到FindNextFile不回傳,前面的輸出in有,后面的輸出out沒有。
uj5u.com熱心網友回復:
http://download.csdn.net/download/chenzhjlf/2485790看下這個,看看有無幫助~
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/75362.html
標籤:基礎類
