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

时间:2011-09-05 05:48:50

标签: winapi visual-c++ mfc ccombobox

我正在使用CComboBox :: Dir(DDL_READWRITE,路径)来填充组合框的内容。一切都很好,但是当我重置Archive标志并设置Index标志时,Dir()不返回任何文件。我正在使用

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

在我列出的目录中。我已经尝试将第一个参数更改为Dir()函数,但它没有帮助。我尝试过FindFirstFile()/ FindNextFile()并且它们正常工作

有什么想法可以解释这种行为的原因吗? 这可能是Dir()函数中的错误吗?如果是,它会影响其他什么功能? 如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

这是一个非常有趣的问题。我在Win 7 64 Bit上调试它到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一起返回。在函数的入口处,更改了attr以便它永远不会设置FILE_ATTRIBUTE_NOT_CONTENT_INDEXED,因此循环中的if将永远不会为true,并且文件名永远不会添加到控件中。

很抱歉,但据我所知,您必须等待MS修正错误或自己完成工作。