2016-11-03 3 views
0

たとえば、%APPDATA%ディレクトリに "DATABASE"という特定のフォルダがあります。if文を実行してfile.cFileNameを使用して特定のファイルまたはフォルダを検索するには

は、私が試した:

#include <iostream> 
#include <windows.h> 

using namespace std; 

int main(){ 

    string path = getenv("appdata"); 
    path += "\\*"; 

    WIN32_FIND_DATA file; 
    HANDLE search_handle = FindFirstFile(path.c_str(), &file); 

    if (search_handle){ 
     do{ 
      cout << file.cFileName << endl; // Prints all the files/folders in %appdata% 
     }while (FindNextFile(search_handle, &file)); 
    } 

    // Real Problem Below. . . 

    if(file.cFileName == "DATABASE"){ // Doesn't work 
     cout << "Folder Found! << endl; 
    }else{ 
     cout << "Error: Folder not found. << endl; 
    } 


    getchar(); 

    return 0; 
} 

それは私がそれをやりたいしません、これを行うための別の方法がありますか?

答えて

1

これはJavaまたはC#ではありません。ポインタと比較した配列の==演算子は、そのようには動作しません。

あなたはcFileNameメンバーの定義を見れば、それはこれです:あなたがUnicodeまたはMBCSのために構築されたかどうかに応じて

TCHAR cFileName[MAX_PATH]; 

、TCHARはWCHARまたはcharのいずれかです。

本当に比較したい場合は、_tcsicmp()を使用してください。 Windowsではファイル名で大文字小文字を区別しないので、_tcsscmp()の代わりに_tcsicmp()を使用するとします。問題のコード行は次のように解決できます。

if(0 ==_tcsicmp(file.cFileName, _T("DATABASE"))){ // works now 

_tcsicmp()はstricmp()のTCHARに相当します。一般的に、Visual C++で新しいプロジェクトを作成すると、通常はUnicode文字列が有効になります。

+0

ありがとうございました! :) 最後にそれを得ました。 –

関連する問題