windows中用FindFirstFile取得文件名,GetLastError返回18(没有文件或目录),但目录不为空。
这些代码是在DIR_Open()函数中的,第一次调用DIR_Open函数把指定目录中的所有文件和目录的名字保存在一个结构体中,第次调用DIR_Open()函数是进入刚刚目录中的子目录下面;一共三次调用,都是进入上次目录的子目录下面,第一次完全正常;第二次GetLastError()返回87(参数错误,但是和第一次输入的格式一样);第三次GetLastError返回18,但是目录下还有两个子目录。
这个问题已经纠结三天了,,,哪位高人指点一下,小弟感激不尽.
strcpy(Pos_Order[0].Dirpath,(char *)Dirpath);
strcpy(last,(char *)Dirpath);
strcat(last,"\*"); /*FindFirstFile 要求一定的格式*/
DirHandle = FindFirstFile(last,&DirInfo);
ErrorCode = GetLastError();
if ( DirHandle!=INVALID_HANDLE_VALUE && ErrorCode != ERROR_NO_MORE_FILES)
{
strcpy(tmp.NAMEOFFSET[i].FileName,(char *)DirInfo.cFileName);
tmp.NAMEOFFSET[i].FileSize = (U32)DirInfo.nFileSizeLow;
i++;
}
else
{
GYFILEBROWSER_ERR(("\n ErrorCode = [%d]",ErrorCode));
GYFILEBROWSER_ERR(("\n ERROR in [%s]  [%d]",__FUNCTION__,__LINE__));
return GY_ERROR;
}

*DIRHandle = (GYDIR_HANDLE)DirHandle;
Pos_Order[0].DirHandle = (GYDIR_HANDLE)DirHandle;

while (DirHandle!=INVALID_HANDLE_VALUE&&ErrorCode!=ERROR_NO_MORE_FILES)
{
FindNextFile(DirHandle,&DirInfo);
ErrorCode=GetLastError();
if ( ErrorCode != ERROR_NO_MORE_FILES)
{
strcpy(tmp.NAMEOFFSET[i].FileName,(char *)DirInfo.cFileName);
tmp.NAMEOFFSET[i].FileSize = (U32)DirInfo.nFileSizeLow;
i++;
}
}
FindClose(DirHandle);

解决方案 »

  1.   

    这个应该Debug下看看,用CFileFind封装类可能更简单
      

  2.   

    这是linux项目,用的C,在WINDOWS下封装成项目要求的接口。
    做出来的程序在WINDWOS下能跑,在linux 下面也能跑!
    主要是因为在WINDIWS下面高度方便
      

  3.   

    是“\*”,应该是“\\*”吧。
    你可以试试先::SetCurrentDirectory()改变当前目录,再用FindFirstFile。这样就直接用"*"就可以了。
    你的项目里用了一大堆strcat这类函数,这类函数对应的是ANSI字符串,用_tcscat比较好吧。
    做出来的程序不也得分别编译么?用#define定义的标志进行选择性编译么?
      

  4.   

    SetCurrentDirectory()改变当前目录
    findfirstfile参数用*,findnextfile将出现此目录下的文件和子目录,但是我的也出现的问题,Getlasterror=18,findnextfile根本就掉了一半的目录和文件,不知道什么原因。
    if (!SetCurrentDirectory(dir)){
    cout<<"set path failed...";
    return;
    }
    WIN32_FIND_DATA findData;
    HANDLE hFindFiles = FindFirstFile(L"*", &findData);
    while (FindNextFile(hFindFiles, &findData)) {
    wcout<<findData.cFileName<<L"\n";
    }
      

  5.   

    vc++ 交流加我Q:184419205 我新手