Winapi 若未设置存档属性且设置了索引属性,则CComboBox::Dir函数不会列出目录

Winapi 若未设置存档属性且设置了索引属性,则CComboBox::Dir函数不会列出目录,winapi,visual-c++,mfc,ccombobox,Winapi,Visual C++,Mfc,Ccombobox,我使用CComboBox::Dir(DDL_READWRITE,path)填充组合框的内容。一切正常,但当我重置存档标志并设置索引标志时,Dir()不会返回任何文件。我正在使用 attrib -A *.* attrib +I *.* 在我列出的目录中。我已尝试将第一个参数更改为Dir()函数,但没有帮助。我尝试了FindFirstFile()/findNext文件(),它们工作正常 有什么办法解释这种行为的原因吗? 这可能是Dir()函数中的错误吗?如果是,它还能起到什么作用? 如何解决这个问

我使用CComboBox::Dir(DDL_READWRITE,path)填充组合框的内容。一切正常,但当我重置存档标志并设置索引标志时,Dir()不会返回任何文件。我正在使用

attrib -A *.*
attrib +I *.*
在我列出的目录中。我已尝试将第一个参数更改为Dir()函数,但没有帮助。我尝试了FindFirstFile()/findNext文件(),它们工作正常

有什么办法解释这种行为的原因吗? 这可能是Dir()函数中的错误吗?如果是,它还能起到什么作用?
如何解决这个问题?

这是一个非常有趣的问题。我在Win 7 64位下将其调试为comctl32.dll
ListBox\u DirHandler
assembler代码,发现Windows正在执行类似的操作(只是一些简化的代码):

问题是返回的文件带有
finddata.dwFileAttributes==file\u attributes\u NOT\u CONTENT\u index
。在函数输入时,attr被更改,因此它永远不能设置
FILE\u ATTRIBUTE\u NOT\u CONTENT\u index
,因此循环中的if永远不会为true,文件名也永远不会添加到控件中

很抱歉,但据我所知,您将不得不等待MS错误修复或自己完成工作

// 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);
}