C++ WIN32\u查找\u数据问题-cFileName
我的代码有问题;) 一切似乎都很好,但当我将可执行文件复制到另一台计算机(windows 2003)时,我得到了C++ WIN32\u查找\u数据问题-cFileName,c++,winapi,C++,Winapi,我的代码有问题;) 一切似乎都很好,但当我将可执行文件复制到另一台计算机(windows 2003)时,我得到了 但是对于pszFileName,我得到了非常奇怪的输出,指定FindExInfoMaxInfoLevel是不正确的。报告说: FindExInfoMaxInfoLevel 此值用于验证。支持的值小于此值 此外,从您对FindFirstFileEx的使用情况来看,我看不出您为什么不使用更简单的。指定FindInfoMaxInfoLevel是不正确的。报告说: FindExInfoMax
但是对于pszFileName,我得到了非常奇怪的输出,指定FindExInfoMaxInfoLevel是不正确的。报告说: FindExInfoMaxInfoLevel 此值用于验证。支持的值小于此值
此外,从您对FindFirstFileEx的使用情况来看,我看不出您为什么不使用更简单的。指定FindInfoMaxInfoLevel是不正确的。报告说: FindExInfoMaxInfoLevel 此值用于验证。支持的值小于此值
此外,从您对FindFirstFileEx的使用情况来看,我看不出您为什么不使用更简单的。在未首先检查
hFind
是否有效的情况下,您不能使用FindData
中的输出字段。从:
如果该功能失败或无法
从中的搜索字符串中查找文件
lpFileName参数,返回
值无效。\u句柄\u值和
lpFindFileData的内容包括
不确定
因此,您应该(在解决了此处答案中描述的API调用中的其他问题之后):
如果未首先检查
hFind
是否有效,则不能使用FindData
中的输出字段。从:
如果该功能失败或无法
从中的搜索字符串中查找文件
lpFileName参数,返回
值无效。\u句柄\u值和
lpFindFileData的内容包括
不确定
因此,您应该(在解决了此处答案中描述的API调用中的其他问题之后):
没有足够的代码来诊断问题,尤其是没有任何错误检查的证据。然而,在你的帖子里确实有一些难闻的东西。对strncpy_s()的调用表示pszFileName是指向包含280个元素的数组的指针。这个数字是从哪里来的?这只是猜测吗?在Windows上它永远不会超过260,为什么它会更多?我怀疑当你把它变成一个实数时,就像传递给函数的一个参数,而不是猜测你也会解决问题。没有足够的代码来诊断问题,尤其是没有任何错误检查的证据。然而,在你的帖子里确实有一些难闻的东西。对strncpy_s()的调用表示pszFileName是指向包含280个元素的数组的指针。这个数字是从哪里来的?这只是猜测吗?在Windows上它永远不会超过260,为什么它会更多?我怀疑当你把它变成一个实数时,就像一个传递给函数的参数,而不是猜测你也会解决这个问题。pszFileName是如何声明和初始化的?hFind在win2k3上是有效的句柄吗?pszFileName是如何声明和初始化的?hFind在win2k3上是有效的句柄吗?非常感谢,这个错误实际上是关于FindExInfoMaxInfoLevel的!非常感谢,错误实际上是关于FindExInfoMaxInfoLevel的!
hFind = FindFirstFileEx( szPath, FindExInfoMaxInfoLevel, &FindData, FindExSearchNameMatch, NULL , 0);
strncpy_s( pszFileName, 280, FindData.cFileName, strlen(FindData.cFileName));
hFind = FindFirstFileEx( szPath, /* replace FindExInfoMaxInfoLevel here */,
&FindData, FindExSearchNameMatch, NULL , 0);
if (hFind != INVALID_HANDLE_VALUE)
{
strncpy_s( pszFileName, 280, FindData.cFileName, strlen(FindData.cFileName));
}