Вы устанавливаете слушателя, а затем немедленно возвращаетесь, прежде чем будут получены какие-либо результаты - поэтому ваш возврат всегда пуст. Тело findAllFolders()
должно ждать ответа, прежде чем вернуться. Попробуйте следующее, чтобы заменить _root.list().listen()
:
List<FileSystemEntity> files = await _root.list(recursive: true, followLinks: false).toList();
for (FileSystemEntity entity in files) {
// Do your filename logic and populate _dirs
Чтобы преобразовать строку TCHAR
CString в ASCII, используйте макрос CT2A
- это также позволит вам преобразовать строку в UTF8 (или любой другой Кодовая страница Windows):
// Convert using the local code page
CString str(_T("Hello, world!"));
CT2A ascii(str);
TRACE(_T("ASCII: %S\n"), ascii.m_psz);
// Convert to UTF8
CString str(_T("Some Unicode goodness"));
CT2A ascii(str, CP_UTF8);
TRACE(_T("UTF8: %S\n"), ascii.m_psz);
// Convert to Thai code page
CString str(_T("Some Thai text"));
CT2A ascii(str, 874);
TRACE(_T("Thai: %S\n"), ascii.m_psz);
Существует также макрос для преобразования из ASCII -> Unicode ( CA2T
), и вы можете использовать его в приложениях ATL / WTL, если у вас есть VS2003 или выше.
Дополнительную информацию см. В MSDN .
Если ваш CString - Unicode, вам нужно выполнить преобразование в многобайтовые символы. К счастью, есть версия CString, которая сделает это автоматически.
CString unicodestr = _T("Testing");
CStringA charstr(unicodestr);
DoMyStuff((const char *) charstr);
Есть явное приведите CString к LPCTSTR, чтобы вы могли сделать это (при условии, что не указан юникод):
CString str;
// ....
const char* cstr = (LPCTSTR)str;
Примечание: этот ответ предшествует требованию Unicode; см. комментарии.
Просто приведите его:
CString s;
const TCHAR* x = (LPCTSTR) s;
Это работает, потому что CString имеет оператор приведения, который делает именно это.
Использование TCHAR делает ваш код независимым от Unicode; если вас не волнует Unicode, вы можете просто использовать char
вместо TCHAR
.