首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++ vector有关问题

2013-09-28 
C++ vector问题#include windows.h#include stdio.h#include vector#include stringusing namespa

C++ vector问题

#include <windows.h>
#include <stdio.h>
#include <vector>
#include <string>

using namespace std;

vector<WCHAR *> PictureName;

#define LEN 256

BOOL  DirectoryList(WCHAR *Path)
{
WIN32_FIND_DATA FindData;
HANDLE hFile;
int FileCount = 0;
WCHAR FilePathName[LEN] = {0};
// 构造路径
WCHAR FullPathName[LEN] = {0};
wcscpy(FilePathName, Path);
wcscat(FilePathName, L"\\*.*");
hFile = FindFirstFile(FilePathName, &FindData);
if (hFile == INVALID_HANDLE_VALUE)
{
printf("搜索失败!"); 
return 0;
}
while (::FindNextFile(hFile, &FindData))
{
// 过虑.和..
if (wcscmp(FindData.cFileName, L".") == 0 || wcscmp(FindData.cFileName, L"..") == 0 )
{
continue;
}

// 构造完整路径
wsprintf(FullPathName, L"%s\\%s", Path, FindData.cFileName);
PictureName.push_back(FindData.cFileName);
FileCount++;
}

return 0;
}

int main()
{
DirectoryList(L"E:res");
}


这个小程序在指定的目录E:res里面搜索文件名称,我是想把搜到的文件名保存在PictureName里面,可是调试的时候PictureName的元素都是一样的。我是在E盘的res文件夹里面放了几张图片,然后想把这些图片的名称保存在PictureName对象里面。
[解决办法]
你每次都是把 FindData.cFileName 的地址存入到 PictureName 里面,因该存取字符串才对。
试一下

vector<wstring> PictureName;

很少用 wstring,不知道行不行。
[解决办法]
MFC不熟悉,不知道WIN32_FIND_DATA FindData具体的结构
楼主描述的情形,猜测FindData.cFileName是一个指针型的成员。每次push同一个地址进容器,那么容器内每个变量存放的就是最后1次push进去的内容,当然都是一样的。
有很多类似这样的情况,比如一个char* 用cin输入,然后push,循环,容器内最终存放的都是最后1次cin的结果。

需要用另外一个string保存FindData.cFileName的结果,然后puish_back这个string,这样才能得到你希望的结果。
或者每次new一个char*,strcpy,然后push,当然容器不用的时候需要逐个delete。
[解决办法]
因为你vector保存是是字符串指针, 也就是WIN32_FIND_DATA结体中关于文件名的指针.

那么在你遍历完后, vector中保存的实际都指向WIN32_FIND_DATA结体中的文件名指针. 指向的内容当然就是相同的.

你需要保存一个对象wstring或者CString都可以, 或者new出一个WCHAR类型的缓冲区来保存文件, 然后vector添加这个指针.

热点排行