_findfirst为什么会返回-1
各位大神。
第一步我在调用文件对话框保存完文件后,代码如下:
我调用了文件对话框的代码
char buf[MAX_PATH] = {};
HWND hwnd = GetActiveWindow();
OPENFILENAME ofn = {};
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwnd;
ofn.lpstrFile = buf;
ofn.nMaxFile = MAX_PATH;
if (IDOK == GetSaveFileName(&ofn))
{
wr.Create();
char tmap[_MAP_S];
for (int i = 0;i < _MAP_S; ++i)
{
int cx = i % _MAP_W;
int cy = i / _MAP_W;
char* q = ag.GetGrid(cx, cy);
tmap[cx + cy * _MAP_W] = *q;
}
wr.WriteString(tmap);
wr.Write(buf);
}
第二步点击列表框得到一条选中的文件名,再遍历一个目录下的所有文件得到这个文件。
int CGameScene::insertDirectory( const char* dn,std::vector<std::string>* list )
{
int r = 0;
std::string s1 = dn;
s1 += "\\*.*";
_finddata_t fd;
intptr_t fr = _findfirst(s1.c_str(), &fd);
if (-1 != fr)
{
do
{
//子目录
if (fd.attrib & _A_SUBDIR)
{
if (strcmp(fd.name, ".") != 0 && strcmp(fd.name, "..") != 0)
{
std::string s2 = dn;
s2 += "\\";
s2 += fd.name;
r += insertDirectory(s2.c_str(),list);
}
}
//文件
else
{
//检查是否为位图文件
char* p = strrchr(fd.name, '.');
if (p)
{
//得到后缀名
std::string s3 = p + 1;
//将所有的字符归于小写
for (unsigned int i = 0; i < s3.length(); ++i)
{
if (s3[i] >= 'A' && s3[i] <= 'Z')
s3[i] += ('a' - 'A');
}
//确实为位图文件
if (strcmp(s3.c_str(), "map") == 0)
{
std::string s4 = "";
//s4 += "\\";
s4 += fd.name;
r += 1;
list->push_back(s4);
}
}
}
} while (0 == _findnext(fr, &fd));
_findclose(fr);
}
return r;
}
intptr_t fr = _findfirst(s1.c_str(), &fd);就返回-1了,我不调用第一段的代码,单独调用第二段的代码就能返回非-1.请问各位大神怎么解决这问题。