在一个目录中保存多个文件名(win32 c++)
Saving multiple file names in a directory(win32 c++)
我想在同一目录下保存多个文件名。然而,它似乎只保存数组中的最后一个文件。下面是我的代码:
hFind = FindFirstFile("*.bin", &FindFileData);
if(hFind == INVALID_HANDLE_VALUE) {
printf("Not founded");
}
else {
printf("Found: %s", FindFileData.cFileName);
}
if(hFind != INVALID_HANDLE_VALUE) {
do
{
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
printf("nFound: %sn", FindFileData.cFileName);
}
else
{
filesize.LowPart = FindFileData.nFileSizeLow;
filesize.HighPart = FindFileData.nFileSizeHigh;
count++;
filesize.QuadPart += filesize.QuadPart;
printf("%s %ld bytes", FindFileData.cFileName, filesize.QuadPart);
printf("count number:%sn", FindFileData.cFileName);
files[count] = FindFileData.cFileName;
printf("nfiles array:%s", files[count]);
}
}
while (FindNextFile(hFind, &FindFileData) != 0);
//when I'm printing the file[3], it is showing the last file
printf("file in 3:%s", files[3]);
问题是整个数组只被最后一个文件填满。每次转到下一个文件时,整个数组都会被最后一个文件替换。我不知道这是win32的问题还是别的什么。需要你的见解。提前感谢!
问题在这一行:
files[count] = FindFileData.cFileName;
它复制FindFileData的地址。cFileName变成文件[count]。由于地址总是相同的,所以files数组中的所有数组项将始终包含相同的值。
必须复制整个字符串,而不仅仅是一个指针。将files变量声明为:
字符文件[MAC_FILE_COUNT] [MAX_PATH];
然后替换"files[count] = FindFileData"行。cFileName":
拷贝字符串(文件[数],FindFileData.cFileName);
这一行
files[count] = FindFileData.cFileName;
不复制字符串,它只是复制一个地址。这是一个指针赋值。所以files[]
中的每个元素都指向同一个内存块,字符数组FindFileData.cFileName
。因此,自然地,复制到FindFileData.cFileName
的最后一个值就是您在files[]
中看到的所有索引的值。
如果你想复制字符串,你需要使用strcmp
。你几乎肯定没有为files[]
中的char*
指针分配任何内存,所以你也需要这样做。使用malloc()
和strlen()
然而,由于您将此标记为c++,我将放弃使用原始数组,C字符串等,并切换到c++标准容器。在这种情况下,您似乎想要vector<string>
。
像这样声明容器:
vector<string> files;
然后添加如下内容:
files.push_back(FindFileData.cFileName);
然后像这样遍历容器:
for(vector<string>::iterator it = files.begin(); it != files.end(); ++it) {
// do something with *it
}
- 从命令行c++发送文本文件名
- Win32编译器选项和内存分配
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么文件名被设置为一个点,而不是在读取矢量中的文件名时
- C++win32 API创建多个类似视口的窗口
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- 检测win32服务创建和删除的最佳方法
- WIN32:C++,为什么在WM_CLOSE上调用Messagebox函数程序正在冻结
- 当Microsoft文档仅包含 C# 示例时,如何查找 C++ 包含文件名
- 将 win32 hbitmap 转换为 winrt softwarebitmap
- 使用 WIN32 API (C/C++) 对特定树视图项进行着色
- Alt+Enter 在 Win32 应用中,管理大小调整和分辨率
- VSCode C++ 编译的exe感染了Win32:TrojanX-gen[Trj]
- 如何在CPP的给定目录中列出UTF编码的文件名?
- 从预处理器获取 Windows 版本(C++ Win32)
- Issues with Win32 ReadProcessMemory API
- 如何在win32中使用GetSave文件名保存文件
- Win32 C++:使用开放文件名并显示位图文件
- 如何在GetModuleFileName (Win32 API)中使用POCO获取应用程序文件名
- 在一个目录中保存多个文件名(win32 c++)