2012-04-24 20 views
0

次のコードでは、韓国語/日本語Windows上で動作する必要があります。 それはちょうどうまくいきません、なぜ私は言うことができません...Windows Search C++(MFC)CFindFilesパス区切り文字

あなたは私を助けますか?

void RecurseSearch(LPCTSTR pstr, CString serchTerm, CSimpleMap<CString,CString>* arr) 
{ 
    CFileFind finder; 
    // build a string with wildcards 
    CString strWildcard; 
    int code_point = 0x5c ; 
    WCHAR chr = (WCHAR) code_point; 
    strWildcard.Format(_T("%s%c*%s*"), pstr,chr,serchTerm); 
    CString actualFolder; 
    // start working for files 
    BOOL bWorking = finder.FindFile(strWildcard); 

    while (bWorking) 
    { 

     bWorking = finder.FindNextFile(); 
     actualFolder=finder.GetFilePath(); 
     // skip . and .. files; otherwise, we'd 
     // recur infinitely! 

     if (finder.IsDots()) 
      continue; 

     // if it's a directory, recursively search it 

     else if (finder.IsDirectory()) 
     { 
      CString str = finder.GetFilePath(); 
      RecurseSearch(str, serchTerm, arr); 
     } 
     else 
     { 
      if(arr->GetSize()>200) return; 
      if(arr->FindKey(finder.GetFileURL())==-1) 
       arr->Add(finder.GetFileURL(),finder.GetFileURL()); 
     } 
    } 
    bWorking = finder.FindFile(pstr+(CString)chr+(CString)_T("*")); 
    while(bWorking) 
    { 
     bWorking = finder.FindNextFile(); 
     actualFolder =finder.GetFilePath(); 
     if (!finder.IsDirectory() || finder.IsDots()) continue; 
     else 
     { 
      RecurseSearch(actualFolder, serchTerm, arr); 
     } 

    } 
    finder.Close(); 
} 

このコード私も正しいユニコードが、何もパス区切り...

EDITを設定アメリカンWindows上でうまく動作しますが、韓国にはない... :私は」エラーを識別したが、これはItemNamesおよびItemDisplayNamesに関連していた。 ItemDisplayNamesを検索する必要がありますが、ItemNameのCFindFileを検索する必要があります。

ISearchFolderItemFactoryを使用するようにコードを変更してから、AQSクエリを実行します。

TYみんな!

答えて

1

パス区切り文字にバックスラッシュを使用します。現在の言語にかかわらず、バックスラッシュはすべての場合に受け入れられると文書化されています。それはMFCが物事をねじ込んでいる可能性があります...

ここに役立つ2つのリンクがあります。

http://msdn.microsoft.com/en-us/library/dd317748(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx#naming_conventions

+1

NOP!動作しません!私はすでに '/' '\\' '\' '\'を試したことがありませんトリックを行うようだ! –

+0

@Carlos_rpg:Odd。 MFCのどのバージョン?韓国語版では、「¥」の文字の値は何ですか?例: 'printf(" 0x%X \ n "、 '\');' - MSFTによれば、パスsepはすべての場合0x5Cで、別の文字として表示されます。少なくともそれは私がそれを読む方法です。 – JimR

関連する問題