FindFirstFile()を使用しているときの変換エラー

私は、 FindFirstfFile()メソッドを使ってフォルダ内のファイルを読み込みます このメソッドでは、関数の引数の1つとしてディレクトリパスを読み取っています

Functionname(structname struct_var,char *path);

私はpath.i.eを考えました: "D:\ foldername" .now特定の拡張子を持つファイル名を読み取るために以下のロジックを実行します。

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"の変換データ型とエラーを突き合わせる方法

それはどんな魂ですか?

0
あなたの問題には関係はありませんが、 sprintf を使って cd にテキストをコピーしても、実際には cd どこにでも置くことができます。つまり、メモリ内のどこかを指すことができ、重大なメモリを上書きする可能性があります。バッファにポイントするか、メモリを割り当てるか(自由にしてください!)、通常のchar配列を使用してください。
追加された 著者 Some programmer dude,

1 答え

ソースはUNICODE用にコンパイルされています。利用可能な関数は2つあります。

  • FindFirstFileA(ANSIバージョン)
  • FindFirstFileW(ワイド文字版)

UNICODE FindFirstFile のビルドが実際には FindFirstFileW である場合、 FindFirstFile FindFirstFileA です。

コンパイラは、ワイド文字バッファの代わりに char * を渡していると不平を言っています。

次のいずれかを実行する必要があります。

  • to compile not for UNICODE
  • explicity call FindFirstFileA()
  • use a wide character buffer

また、コードにいくつかのバグがあります:

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

しかし、 schar Buffer の場合と同様の問題で、 cd char * >。構築する必要のあるパスの長さを決定し、メモリを割り当ててからパスを構築する必要があります(割り当てられたバッファを free()することを忘れないでください)。

3
追加された
FindFirstFileA()を明示的に呼び出す場合は、 char として cd を保持します。
追加された 著者 hmjd,
返信してくれてありがとう。私は文字セットプロパティを「未設定」または「マルチバイト文字を使用する」と設定しました.getting 85他のエラー。 FindFirstFile()をFindFirstFileA()に変更したところ、型変換エラーが発生しました。エラーC2664: 'FindFirstFileA':パラメータ1を 'wchar_t *'から 'LPCSTR'に変換できません.Cd変数のデータ型をwchar_tとして変更しました。引数のパスデータ型はchar.hereです。charをwchar_tに変更すると、そのaffetctsプログラムの一部。それを行うための他の方法はありますか?
追加された 著者 hari,
いいえ、私はこれらの変数にメモリを割り当てます
追加された 著者 hari,