Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как получить все файлы в папке? 
:(
    Опции темы
Ortistx
Дата 25.4.2011, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте.

Создаю консольное приложение в MS Visual Studio. На данном этапе разработки программы необходимо:
после ввода пути к папке в качестве параметра, определить какие файлы находятся в данной папке.

Собственно вопрос. Как можно получить список файлов, которые находятся в папке?

Заранее спасибо.
PM MAIL   Вверх
bsa
Дата 25.4.2011, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



FindFirstFile/FindNextFile
PM   Вверх
Ortistx
Дата 27.4.2011, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо.

Но компилятор ругается на строчку hFind = FindFirstFile("C:\\Windows\\*.exe", &FindData);
Error    1    error C2664: 'FindFirstFileW' : cannot convert parameter 1 from 'const char [17]' to 'LPCWSTR'    D:\CPP\find_dile\find_dile\find.cpp    19
Error    2    IntelliSense: argument of type "const char *" is incompatible with parameter of type "LPCWSTR"    d:\cpp\find_dile\find_dile\find.cpp    19

PM MAIL   Вверх
boostcoder
Дата 27.4.2011, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



FindFirstFile(L"C:\\Windows\\*.exe", &FindData);
PM WWW   Вверх
Ortistx
Дата 27.4.2011, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо большое. Получилось.

А Вы могли бы объяснить что делает "L"? и где об этом преобразовании можно почитать?

Добавлено через 2 минуты и 17 секунд
Нет, не получилось. Почему-то вместо имени файлов выводятся адреса...
PM MAIL   Вверх
boostcoder
Дата 27.4.2011, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



Цитата(Ortistx @  27.4.2011,  22:01 Найти цитируемый пост)
вместо имени файлов выводятся адреса

потому что ты юникодную строку пытаешься вывести в стандартный поток? ;)

PM WWW   Вверх
Ortistx
Дата 27.4.2011, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А как надо сделать?

Что делает буковка L?
Надо перед выводом преобразовать строку как-то?
PM MAIL   Вверх
boostcoder
Дата 27.4.2011, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



Цитата(Ortistx @  27.4.2011,  22:27 Найти цитируемый пост)
А как надо сделать?

покажи как выводишь.

Цитата(Ortistx @  27.4.2011,  22:27 Найти цитируемый пост)
Что делает буковка L?

это: http://en.wikibooks.org/wiki/Windows_Programming/Unicode


Это сообщение отредактировал(а) boostcoder - 27.4.2011, 23:01
PM WWW   Вверх
Ortistx
Дата 27.4.2011, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Собственно вот моя программа:

Код

int main()
{
    
    FILE *j;
    j=fopen("1.txt","w");
    WIN32_FIND_DATA FindFileData;
    HANDLE hf;



    hf=FindFirstFile(L"D:\\a\\*.exe", &FindFileData);
    if (hf!=INVALID_HANDLE_VALUE)
    {
        do
        {
            cout << FindFileData.cFileName << endl;
        }
        while (FindNextFile(hf,&FindFileData)!=0);
        FindClose(hf);
    }

    return 0;
}



В папке "a" лежит 5 файлов. Он мне почему-то выводит 5 одинаковых строчек (хотя имена файлов естественно разные):
0039F77C
0039F77C
0039F77C
0039F77C
0039F77C

Вообще мне все названия файлов нужно будет сохранить куда-нибудь, например в строковый массив. Хотя размер его неизвестен будет...Как тут лучше поступить? Куда записать имена файлов, чтобы потом с ними можно было бы работать как со строками?
PM MAIL   Вверх
boostcoder
Дата 27.4.2011, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



во первых - в опциях проекта отключи поддержку юникода. так: http://clip2net.com/clip/m47996/1303935165...tt2979-27kb.png
во вторых - список файлов можно хранить в std::vector<std::string>

PM WWW   Вверх
Ortistx
Дата 27.4.2011, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Отключил, получилось, показывает список файлов. Спасибо.

А лучше во всех проектах по умолчанию отключать поддержку юникода?
PM MAIL   Вверх
boostcoder
Дата 27.4.2011, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



Цитата(Ortistx @  27.4.2011,  23:21 Найти цитируемый пост)
лучше во всех проектах по умолчанию отключать поддержку юникода? 

очень зависит.
PM WWW   Вверх
bsa
Дата 28.4.2011, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Цитата(Ortistx @  27.4.2011,  23:21 Найти цитируемый пост)
А лучше во всех проектах по умолчанию отключать поддержку юникода? 

Лучше писать сразу юникодовые программы и не париться (большинство функций WinAPI, работающих со строками, имеют две версии FunctionA и FunctionW, а так же макрос Function, который в зависимости от настроек, заменяется FunctionA или FunctionW; так же есть макросы _tmain - замена main(), TCHAR - замена char, _TEXT("<строка>") или _T('<символ>') - преобразования строки/символа в юникод по необходимости).
А в твоей программе следует использовать _findfirst/_findnext, чтобы не заморачиваться.
PM   Вверх
xvr
Дата 28.4.2011, 11:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Ortistx @  27.4.2011,  21:31 Найти цитируемый пост)
Error    1    error C2664: 'FindFirstFileW' : cannot convert parameter 1 from 'const char [17]' to 'LPCWSTR'    D:\CPP\find_dile\find_dile\find.cpp    19
Error    2    IntelliSense: argument of type "const char *" is incompatible with parameter of type "LPCWSTR"    d:\cpp\find_dile\find_dile\find.cpp    19

Ау, модераторы! А можно, куда нибудь в шапку раздела прибить большими гвоздями -
Цитата


Если у вас компилятор ругается на строки, переданные в вызовы API, и требует что то вроде LPCWSTR -
отключите поддержку Unicode в проекте!


А то достало уже, честное слово. Каждая 5я тема об этом  smile 

PM MAIL   Вверх
bsa
Дата 28.4.2011, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



xvr, создай соответствующую тему - прикреплю

Это сообщение отредактировал(а) bsa - 28.4.2011, 11:44
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




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


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

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