我正在开发一个小函数,它遍历目录并将所有文件的名称放入基于wchar_t*
的向量中:
#include <Windows.h>
#include <tchar.h>
#include <vector>
#include <Shlwapi.h>
#pragma comment(lib, "Shlwapi.lib")
int _tmain(int argc, _TCHAR* argv[])
{
WIN32_FIND_DATA ffd;
std::wstring sDir(L"D:\\Test");
sDir += L"\\*";
HANDLE hFind = INVALID_HANDLE_VALUE;
hFind = FindFirstFile(sDir.c_str(), &ffd);
std::vector<wchar_t*> vctsFiles;
wchar_t szBuf[MAX_PATH];
do
{
if (!(ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
memset(szBuf, 0, sizeof(szBuf));
::PathCombine(szBuf, L"D:\\Test", ffd.cFileName);
vctsFiles.push_back(szBuf);
}
} while(FindNextFile(hFind, &ffd) != 0);
return 0;
}
问题是,只要附加新文件名,矢量中的所有条目都会被覆盖。换句话说,所有向量条目都包含相同的值。
我不太确定为什么会发生这种情况,因为在将缓冲区用于新条目之前,我总是清除缓冲区。有没有办法纠正这种行为?任何建议将不胜感激。
答案 0 :(得分:4)
你的向量是一个指针向量,它们都指向同一个地方(szBuf
)。您需要每次或更好地分配一个new szBuf
,使用wstring的向量。
std::vector<std::wstring> vctsFiles;