使用FindFirstFile()时转换错误

时间:2012-02-06 10:29:41

标签: c

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

之一读取
Functionname(structname struct_var,char *path);

我考虑了path.i.e例如:“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); 
}  
  

错误:1> f:\ 2-2-2012 \ myproject \ myproject \ module.cpp(94):错误C2664:'FindFirstFileW':无法将参数1从'char *'转换为'LPCWSTR'

如何将变量“cd”的转换数据类型与out错误匹配。

对它有什么灵魂?

1 个答案:

答案 0 :(得分:3)

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

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

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

编译器抱怨您正在传递char*而不是宽字符缓冲区。

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

  • 编译不适用于UNICODE
  • 明确表示致电FindFirstFileA()
  • 使用宽字符缓冲区

此外,代码中存在一些错误:

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

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