我用FindFirstFile查找优盘上的文件,里面有文件夹和文件,其中文件夹名超常,导致返回的句柄无效,于是查找不能继续进行下去! 我现在想知道如何继续进行下去?

解决方案 »

  1.   

    我经常用这个函数,但一直没有向你所说那么长的文件夹名!
    实在不行就继承这个类,然后重载一个自己的FindFirstFile函数好了
      

  2.   

    应该这么说,本程序不是unicode版本,所以对于那种文件名中含有全角字符,虽然字符数不超过最大数(244),但是实际上它的字节数已经超过了MAX_PATH,这时候FindFirstFile()的返回句柄无效,
    错误为234 More data is available.  ERROR_MORE_DATA  
    因为本程序非常大,一个项目,不能随便改动,而这个函数也非常底层,改动不知会带来什么意想不到的结果!大家可以用这个文件名测试一下
    01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123フフフフフフフフフフフフフフフフフフ 后面是日文字符,大家也可以换成相应个数的中文字符(只要是全角就可以)!
      

  3.   

    用FindFirstFileW即可
    WIN32_FIND_DATAW fd; HANDLE hFind = ::FindFirstFileW(L"*.*", &fd);
    if (hFind == INVALID_HANDLE_VALUE)
    return; ::FindClose(hFind);
    USES_CONVERSION;
    MessageBox(W2A(fd.cFileName));
      

  4.   

    上面的文件名不可能存在吧。win2k 下面自动剪掉。