На форуме запрещена публикация любого незаконного материала, нарушающего авторские права создателей, а также просьбы выложить это! МЫ поможем ВАМ найти бесплатную альтернативу! О публикации ключей, креков, пиратского ПО, игр, музыки, фильмов и т.д. - сообщать СЮДА!
Доброго времени суток. Помогите пожалуйста разобраться с такой проблемой:
пишу консольное приложение на Visual C++ для работы с изображениями (использую GDlib), которое в качестве параметра командной строки принимает имя каталога, в котором лежат файлы, которые необходимо обработать. Собственно, проблема заключается в том, что я не могу получить список файлов этого каталога. Погуглил на эту тему, нашел вот [Ссылки могут видеть только зарегистрированные пользователи. ]. Однако нигде не могу найти файл dir.h, к тому же, что-то мне подсказывает, что это довольно древний файлец времен DOS'а и Borland Turbo C++, и в винде есть его современный аналог. Если кто знает, укажите пожалуйста, в какую сторону ковырять.
Доброго времени суток. Помогите пожалуйста разобраться с такой проблемой:
пишу консольное приложение на Visual C++ для работы с изображениями (использую GDlib), которое в качестве параметра командной строки принимает имя каталога, в котором лежат файлы, которые необходимо обработать. Собственно, проблема заключается в том, что я не могу получить список файлов этого каталога. Погуглил на эту тему, нашел вот [Ссылки могут видеть только зарегистрированные пользователи. ]. Однако нигде не могу найти файл dir.h, к тому же, что-то мне подсказывает, что это довольно древний файлец времен DOS'а и Borland Turbo C++, и в винде есть его современный аналог. Если кто знает, укажите пожалуйста, в какую сторону ковырять.
Пример работы FindFirstFile, FindNextFile, FindClose с поиском всех файлов в папке C:\Windows\. Использовал Компилятор Compiler C++. Среда разработки Visual Studio 2008 SP1.
Пример:
Сразу скажу по коду, я использовал FindFirstFileA, т.к. мне влом было менять настройки на MultiByte, а затем опять ставить на Unicode. Лучше, конечно, использовать FindFirstFile (это задефайновая вещь).
Код:
#include <queue>
#include <windows.h>
const char* file_name = "c:\\windows\\*.*";
const char* file_path = "c:\\windows\\";
int main()
{
WIN32_FIND_DATAA find_file_data;
HANDLE hFind = FindFirstFileA(file_name, &find_file_data);
if (hFind == INVALID_HANDLE_VALUE)
{
printf("Files was not finded.");
}
else
{
do
{
printf("File Name = %s\n", find_file_data.cFileName);
if (find_file_data.cAlternateFileName[0])
printf("File Name in DOS = %s\n", find_file_data.cAlternateFileName);
printf("Full File Name = %s%s\n\n", file_path, find_file_data.cFileName);
}
while (FindNextFileA(hFind, &find_file_data));
FindClose(hFind);
}
return 0;
}
Помог, скажи спасибо
Последний раз редактировалось L.E.O.; 10.06.2009 в 14:34..
Этот пользователь сказал cпасибо за это полезное сообщение:
батничек в винде с содержимым: tree /F >имя_файла.txt
Извените, но данный способ не поможет, в виду того, что эта команда показывает нам дерево каталога. Если еще в этом каталоге будут другие папки с файлами на 1000 Гб, то она будет очень долго работать, пока не пройдет все папки и файлы. Так же создается лишний файл, с этими и другие лишними данными. А этот файл, скорее всего, в дальнейшем нам не пригодится. Так же безопасности в нем нет: имя_файла.txt ставим "только для чтения" и все, прога не корректно работает. Еще большим недостатком данного способа является то, что мы зависим от содержимого текстового файла. Батнички в программировании лучше всего подходят для обновления программы, но не для этого случая.
PS: если уж пользоваться батником, то лучше будет команда dir, а не tree
Помог, скажи спасибо
Последний раз редактировалось L.E.O.; 10.06.2009 в 19:53..
Кстати вопрос в тему, но как раз касательно этого самого древнего ДОСа
Программа тоже пытается получить список файлов в каталоге, и успешно его получает (язык программирования Borland C++ 3.1, команды _dos_findfirst, _dos_findnext).
Но заметил один нюанс. На одной машине весь список файлов красиво выдается в алфавитном порядке, а на другой - вразброс Верней скорее по дате добавления.
Как заставить везде выдавать список по алфавиту? Самому внутри сортировать полученный список? Или где то есть вариант получить уже в нужном порядке файлы?
А за чем ручками то писать сортировку? Ведь можно использовать STL (Standart Template Library), а там уже есть написаная сортировка (sort, qsort и другие). Остается только написать сравнение и все. Хотя в Borland C++ 3.1 я не знаю есть там STL или нету. Если нету, то уж придется писать сортировку и убеждаться, что компания Borland все таки плохо пишет программы и компиляторы