微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将WIN32_FIND_DATA转换为string?

即时通讯使用WIN32_FIND_DATA存储数据findfirstfile输出。 我想文件的位置(C:文件)作为一个string,但我不知道如何得到它或任何其他数据。

编辑:这是我的代码

PTSTR pszFileName; PTSTR pszFileName2[100]; if (search_handle) { do { pszFileName = file.cFileName; pszFileName2[loop] = pszFileName; Sleep(100); loop++; std::wcout << file.cFileName << std::endl; } while(FindNextFile(search_handle,&file)); CloseHandle(search_handle); }

将Python环境移到新的操作系统安装

Java计划任务(在Windows中)

C#检查是否加载窗口

从 r更改为 r n,在窗口中停止sed

无法parsing的外部符号_stricoll

使用Windows复制对话框进行复制

C#:我怎样才能远程创build用户帐户?

快速,二进制数据库替代

我们如何在Linux中使用sleep()来保持我们的cpu使用率合理,同时仍然具有适当的时间精度?

如何检查Array中是否存在(Sub)数组

WIN32_FIND_DATA是一个结构体。 cFileName出cFileName成员。

例如:

WIN32_FIND_DATA FindData = {0}; HANDLE hFind = FindFirstFile(pszPattern,&FindData); if (hFind != INVALID_HANDLE_VALUE) { do { PTSTR pszFileName = FindData.cFileName; // Todo: Use pszFileName in some way... } while (FindNextFile(hFind,&FindData)); FindClose(hFind); }

更新回应评论

在这个例子中,字符串的存储位于堆栈中,每个调用使用相同的缓冲区。 这意味着每个FindNextFile()覆盖前面的字符串。 您将不得不复制字符串。

既然你在std使用C ++和类,我建议你将它存储在std::string (或者更好的是,确保你定义了UNICODE和_UNICODE并使用wstring 。初始化一个新的string类将会在你的代表。

或者,你可以使用典型的C技术(例如:使用malloc + memcpy , strdup或类似的方法)来复制字符串,但是听起来好像你可能需要在C中进行字符串,指针和内存分配的复习。

顺便说一句 – 检查错误,你的代码比较查找句柄与NULL ; 这是不正确的。 FindFirstFile() )在失败时返回INVALID_HANDLE_VALUE (解决(HANDLE)-1 )。 此外,要关闭句柄,您将需要使用FindClose() ,而不是CloseHandle() 。 (一个“查找句柄”实际上不是一个内核对象的句柄,就像一个文件句柄,一个模块的句柄或者一个线程或者进程句柄一样,它们只是重载了这个类型)。

问题是你要在你的数组中存储文件名的地址。 每次调用FindNextFile() ,都会将结构中的数据替换为下一个文件的信息。 您需要为数组中的字符串分配内存,然后将结构中的字符串复制到数组中(可能使用strncpy_s() )。

您的代码只是将指针存储到结构的文件名成员,每找到一个文件。 如果你看看数组中的每个元素指向的地址,它们都指向相同的地方。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐