0

次のコードを考えると、韓国語/日本語の Windows SO で動作する必要があります。うまくいかないだけで、理由がわかりません...

手伝ってくれませんか?

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();
}

このコードは、アメリカの Windows では正常に動作しますが、韓国語では動作しません...パス区切り文字を正しい Unicode に設定しましたが、何も設定しません...

編集: エラーを特定しました。これは、ItemNames と ItemDisplayNames に関連しています。ItemDisplayNames を検索する必要がありますが、CFindFile は ItemName を検索します。

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

とにかくTYガイズ!

4

1 に答える 1

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

于 2012-04-24T21:23:07.913 に答える