Windows Search C++(MFC) Разделитель путей CFindFiles
Учитывая следующий код, мне нужно, чтобы он работал на корейской / японской 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, но не на корейской... Я даже установил разделитель пути на правильный юникод, но ничего...
РЕДАКТИРОВАТЬ: я идентифицировал ошибку, это было относительно ItemNames и ItemDisplayNames. Мне нужно искать ItemDisplayNames, но CFindFile ищет ItemName.
Я изменяю код для использования ISearchFolderItemFactory, а затем выполняю запрос AQS.
TY Ребята в любом случае!
1 ответ
Используйте обратную косую черту для разделителя пути. Независимо от текущего языка, обратный слеш задокументирован как принятый во всех случаях. Может быть, MFC все испортил...
Вот две ссылки, которые должны помочь.
http://msdn.microsoft.com/en-us/library/dd317748(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx