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);
这些代码是在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);
解决方案 »
- ICMP回包出现 nonecho type错误。
- 怎么把MFC程序转为W32的?
- 注释宏是一个什么概念呀?作用是什么,仅仅是注释吗? 为何两个注释宏之间的代码是灰色的,有什么特别之处吗? [code=C/C++] //{{AFX_MSG(C
- VC++灵异事件,求助真相帝!!!!!!!!!
- AutoCAD objectarx 启动可执行程序
- XP下调用关机程序
- 求:Visual Assist for vc++2005 !下载地址或者现有的,谢谢
- 这样的数据该怎么提交最好?
- 如何写ADSL,ISDN的拨号程序?它们和普通拨号程序有什么区别?
- 如何获得传输数据报文中的特定字符代码
- 急!!!女生求救,求高手帮忙,用C写的一个简单的蚁群算法,解决tsp问题,但~
- CreateInstance 问题
做出来的程序在WINDWOS下能跑,在linux 下面也能跑!
主要是因为在WINDIWS下面高度方便
你可以试试先::SetCurrentDirectory()改变当前目录,再用FindFirstFile。这样就直接用"*"就可以了。
你的项目里用了一大堆strcat这类函数,这类函数对应的是ANSI字符串,用_tcscat比较好吧。
做出来的程序不也得分别编译么?用#define定义的标志进行选择性编译么?
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";
}