Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CFile не открывает путь 
:(
    Опции темы
Ka40k
Дата 23.12.2009, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 23.12.2009

Репутация: нет
Всего: нет



Здравствуйте. Пишу небольшой файл менеджер с использование MFC на Dialog based приложении.
Вот функция поиска всех файлов в папке и их выводом в список:
Код

void CFile_managerDlg::searchFiles(CString path) {
    CFileFind ff;
    CString str = path+'*';
    m_static.SetWindowText(str);
    ff.FindFile(str);
    while(ff.FindNextFile()) {
        m_list.AddString(ff.GetFileName());
    }
    m_list.AddString(ff.GetFileName());
}

Если указать путь в FindFile вручную то всё сработает и найдёт все файлы в нужной папке, но вот если путь приходит в функцию по параметру, например "C:\Program Files\", получается строка "C:\Program Files\*", то просто ничего не находит :(  
m_statiс - компонент static text, в который я вывожду текущее состояние.
m_list - CListBox со списком фалов.
Использую Visual C++ 6.0
У меня есть предположение что путь теряет экранирование слешей. К примеру воожу то я, если вручную "C:\\Program Files\\*", хотя если в m_static он отображается нормально, то должен ведь нормально в CFile подпадать... 
Если кто может, подскажите, а то совсем запутался...
PM MAIL   Вверх
voov
Дата 25.12.2009, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

Репутация: 8
Всего: 8



да, похоже не находит именно изза отсутсвия экранирования слэшей.

еще обрати внимание, у листбокса есть метод CListBox::Dir, возможно тебе будет проще вопользоваться им
PM MAIL   Вверх
Ka40k
Дата 26.12.2009, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 23.12.2009

Репутация: нет
Всего: нет



Цитата(voov @ 25.12.2009,  18:58)
да, похоже не находит именно изза отсутсвия экранирования слэшей.

еще обрати внимание, у листбокса есть метод CListBox::Dir, возможно тебе будет проще вопользоваться им

Спасибо, CListBox::Dir немного неудобен smile
А как можно ещё раз проэкранировать слеши? Есть ли аналог пхп функции addslashes? Пересмотрел все методы у CString, нету такого :(

Это сообщение отредактировал(а) Ka40k - 26.12.2009, 09:47
PM MAIL   Вверх
voov
Дата 26.12.2009, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

Репутация: 8
Всего: 8



Вообще надежнее пользоваться обратным слэшами. Их не нужно экранировать и ОС их понимает.

Есть метод CStringT::Replace

Вот этот код работает.
Код

     Cstring path = ...
    CFileFind finder;
    BOOL working = finder.FindFile(path + _T("*.*"));
    while (working) {
        working = finder.FindNextFile();
        // имя очередного файла
        CString fileName = path + finder.GetFileName();
    }



Это сообщение отредактировал(а) voov - 26.12.2009, 11:45
PM MAIL   Вверх
zkv
Дата 27.12.2009, 05:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 16
Всего: 92



Цитата(voov @  26.12.2009,  11:40 Найти цитируемый пост)
Вообще надежнее пользоваться обратным слэшами. Их не нужно экранировать и ОС их понимает.

это называется прямым слешем ('/'), а обратный такой: ('\')

да, и обратные нужно экранировать как-то так: "C:\\Program Files\\My Cool App"

Это сообщение отредактировал(а) zkv - 27.12.2009, 05:56
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0486 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.