gpt4 book ai didi

使用 FindFirstFile() 时发生转换错误

转载 作者:太空宇宙 更新时间:2023-11-04 07:35:50 28 4
gpt4 key购买 nike

我在方法中使用 FindFirstfFile() 来读取文件夹中的文件在此方法中,我将目录路径作为函数参数之一读取

Functionname(structname struct_var,char *path);

我考虑了路径,例如:“D:\foldername”。现在执行以下逻辑来读取具有特定扩展名的文件名。

WIN32_FIND_DATA FindFileData; 
HANDLE hFind = INVALID_HANDLE_VALUE;
DWORD dwError;
char* Buffer;
char Buffer1[256];
char *schar;
char *cd;
//wchar_t *cd;
FILE* name_text;
char keyb;
FILE *fp;
i = 0;
time_t t_time;
int count=0;
sprintf(cd,"%s",Path);
printf("%s",cd);

printf ("Target directory is %s.\n",cd);

strcpy(schar,cd);
sprintf(Buffer,"%s",schar);
strcat(Buffer,"\\");
sprintf(Buffer1,"%s",Buffer);
strcat(schar,"\\*.b11");

hFind = FindFirstFile(cd, &FindFileData);//getting conversion error

if (hFind == INVALID_HANDLE_VALUE)
{
printf ("Invalid file handle. Error is %u.\n", GetLastError());
return (-1);
}

Error:1>f:\2-2-2012\myproject\myproject\module.cpp(94) : error C2664: 'FindFirstFileW' : cannot convert parameter 1 from 'char *' to 'LPCWSTR'

如何匹配变量“cd”的转换数据类型而不出错。

对它有什么看法吗?

最佳答案

正在为 UNICODE 编译源代码。有两个可用的函数:

  • FindFirstFileA(ANSI 版本)
  • FindFirstFileW(宽字符版)

当为 UNICODE 构建时 FindFirstFile 实际上是 FindFirstFileW,否则 FindFirstFileFindFirstFileA

编译器提示您传递的是 char* 而不是宽字符缓冲区。

您需要执行以下操作之一:

  • 不为 UNICODE 编译
  • 显式调用 FindFirstFileA()
  • 使用宽字符缓冲区

此外,代码中还有一些错误:

sprintf(cd,"%s",Path);

但是 cd 是一个 char* 并且永远不会设置为指向任何分配的内存,与 scharBuffer 类似的问题。您需要确定您需要构建的路径的全长,分配内存然后构建路径(记住 free() 分配的缓冲区)。

关于使用 FindFirstFile() 时发生转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9158745/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com