2011-09-05 81 views
3

我正在使用CComboBox :: Dir(DDL_READWRITE,路徑)來填充組合框的內容。一切都很好,但是當我重置存檔標誌並設置索引標誌時,Dir()不返回任何文件。我正在使用CComboBox :: Dir函數沒有列出目錄如果存檔屬性未設置和索引屬性設置

attrib -A *.* 
attrib +I *.* 

在我列出的目錄中。我已經嘗試將第一個參數更改爲Dir()函數,但它沒有幫助。我已經嘗試FindFirstFile()/ FindNextFile(),他們工作正常

任何想法來解釋這種行爲的原因? 這可能是Dir()函數中的一個錯誤嗎?如果是的話,它可以起什麼作用? 如何解決這個問題?

回答

0

這是一個非常有趣的問題。我調試它在Win 7 64位下降到COMCTL32.DLL ListBox_DirHandler彙編代碼,並發現,Windows正在做這樣的事情(只是一些簡單的代碼):

// attr is the low word of the parameter passed to CComboBox::Dir. 
attr &= FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_DIRECTORY|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_NORMAL; 
attr |= FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_READONLY; 

WIN32_FIND_DATA finddata; 
FindFirstFile(..., &finddata) 
while(...) { 
    if(finddata.dwFileAttributes == FILE_ATTRIBUTE_COMPRESSED) 
    finddata.dwFileAttributes = FILE_ATTRIBUTE_NORMAL; 
    if(finddata.dwFileAttributes & attr) { 
    // some more checks and then might add the file name to the control; 
    } 
    FindNextFile(..., &finddata); 
} 

的問題是,你的文件與finddata.dwFileAttributes==FILE_ATTRIBUTE_NOT_CONTENT_INDEXED返回。在函數的入口被改變以便它永遠不會有FILE_ATTRIBUTE_NOT_CONTENT_INDEXED被設置,所以if在循環內永遠不會是真實的,並且文件名永遠不會被添加到控件中。

對不起,但據我所見,你將不得不等待MS bugfix或自己做這項工作。