0

FindFirstFile(...)関数を使用してファイルを検索するプログラムを作成しました。しかし、この関数の出力を印刷しようとすると、コンソール ウィンドウにいくつかの不明な文字列が表示されます。wcoutいくつかの投稿を読んだところ、の代わりに使用してみることが書かれていましたcout。試してみますが、役に立ちません。問題は ANSI エンコーディングと UNICODE エンコーディングの違いにあると思います。誰か助けてくれませんか?どんな助けにもとても感謝します!

これが私のコードです:

#include "FindFile.h"
#include <iostream>
using namespace std;

void FindFileCl::Execute(Input * input, Response * response )
{
    WIN32_FIND_DATAA FindFileData;

    HANDLE h = FindFirstFileA((input->FileName).c_str(),    // name of the file

        &FindFileData);
    if (h)
    {   



        cout << "Search Results:\n";

        cout<<(FindFileData.cFileName);


        CloseHandle(h);
    }
    else
    {
        cerr << "File is NOT found:" << GetLastError() << "\n";
    }




} 
4

2 に答える 2

1

失敗した場合、 ではなくFindFirstFile()を返します。INVALID_HANDLE_VALUENULL

関数がlpFileNameパラメーター内の検索文字列からのファイルの検索に失敗した場合、または失敗した場合、戻り値はINVALID_HANDLE_VALUEであり、の内容lpFindFileDataは不確定です。拡張エラー情報を取得するには、GetLastError関数を呼び出します。

そして次のようになります( WinBase.hINVALID_HANDLE_VALUEある次のマクロ):#define-1

#define INVALID_HANDLE_VALUE ((HANDLE)(LONG_PTR)-1)

つまりif (h)、成功または失敗のいずれかで入力されます。初期化されていないため、障害が発生した場合はcFileName修正されず、ジャンクが印刷されます。ifを明示的にチェックするように条件を変更しINVALID_HANDLE_VALUEます。

if (h != INVALID_HANDLE_VALUE)
{
}
于 2013-08-20T11:19:59.497 に答える