SamForum.org  
SamLab.ws
Заблокированные пользователи

Вернуться   SamForum.org > Программирование > С
Важная информация

Ответ
 
Опции темы Опции просмотра
Получить список файлов каталога
Старый Добавлено: 10.06.2009, 02:44
  (#1)
White Charmer
Заслуженный
Заслуженный пользователь
 
Аватар для White Charmer

По умолчанию Получить список файлов каталога

Доброго времени суток. Помогите пожалуйста разобраться с такой проблемой:
пишу консольное приложение на Visual C++ для работы с изображениями (использую GDlib), которое в качестве параметра командной строки принимает имя каталога, в котором лежат файлы, которые необходимо обработать. Собственно, проблема заключается в том, что я не могу получить список файлов этого каталога. Погуглил на эту тему, нашел вот [Ссылки могут видеть только зарегистрированные пользователи. ]. Однако нигде не могу найти файл dir.h, к тому же, что-то мне подсказывает, что это довольно древний файлец времен DOS'а и Borland Turbo C++, и в винде есть его современный аналог. Если кто знает, укажите пожалуйста, в какую сторону ковырять.
White Charmer вне форума Отправить личное сообщение для White Charmer
Вверх
Ответить с цитированием
Старый Добавлено: 10.06.2009, 06:02
  (#2)
L.E.O.
Пользователь
Пользователь
 
Аватар для L.E.O.

По умолчанию

Цитата:
Сообщение от White Charmer Посмотреть сообщение
Доброго времени суток. Помогите пожалуйста разобраться с такой проблемой:
пишу консольное приложение на 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..
L.E.O. вне форума Отправить личное сообщение для L.E.O.
Вверх
Ответить с цитированием
Этот пользователь сказал cпасибо за это полезное сообщение:
White Charmer (10.06.2009)
Старый Добавлено: 10.06.2009, 10:30
  (#3)
Master_TV
Радиомеханик
Пользователь
 
Аватар для Master_TV

По умолчанию

батничек в винде с содержимым: tree /F >имя_файла.txt


Лужу, паяю...

Последний раз редактировалось Master_TV; 10.06.2009 в 10:32..
Master_TV вне форума Отправить личное сообщение для Master_TV
Вверх
Ответить с цитированием
Старый Добавлено: 10.06.2009, 14:11
  (#4)
L.E.O.
Пользователь
Пользователь
 
Аватар для L.E.O.

По умолчанию

Цитата:
Сообщение от Master_TV Посмотреть сообщение
батничек в винде с содержимым: tree /F >имя_файла.txt

Извените, но данный способ не поможет, в виду того, что эта команда показывает нам дерево каталога. Если еще в этом каталоге будут другие папки с файлами на 1000 Гб, то она будет очень долго работать, пока не пройдет все папки и файлы. Так же создается лишний файл, с этими и другие лишними данными. А этот файл, скорее всего, в дальнейшем нам не пригодится. Так же безопасности в нем нет: имя_файла.txt ставим "только для чтения" и все, прога не корректно работает. Еще большим недостатком данного способа является то, что мы зависим от содержимого текстового файла. Батнички в программировании лучше всего подходят для обновления программы, но не для этого случая.
PS: если уж пользоваться батником, то лучше будет команда dir, а не tree


Помог, скажи спасибо

Последний раз редактировалось L.E.O.; 10.06.2009 в 19:53..
L.E.O. вне форума Отправить личное сообщение для L.E.O.
Вверх
Ответить с цитированием
Старый Добавлено: 20.07.2009, 16:12
  (#5)
vadymko
Гость
 
Аватар для vadymko

По умолчанию

Кстати вопрос в тему, но как раз касательно этого самого древнего ДОСа
Программа тоже пытается получить список файлов в каталоге, и успешно его получает (язык программирования Borland C++ 3.1, команды _dos_findfirst, _dos_findnext).
Но заметил один нюанс. На одной машине весь список файлов красиво выдается в алфавитном порядке, а на другой - вразброс Верней скорее по дате добавления.
Как заставить везде выдавать список по алфавиту? Самому внутри сортировать полученный список? Или где то есть вариант получить уже в нужном порядке файлы?
Вверх
Ответить с цитированием
Старый Добавлено: 20.07.2009, 20:12
  (#6)
L.E.O.
Пользователь
Пользователь
 
Аватар для L.E.O.

По умолчанию

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

Наилучший способ это получить весь список файлов и отсортировать его так как тебе нужно. Могу предположить, что все файловые мененджеры так делают.


Помог, скажи спасибо
L.E.O. вне форума Отправить личное сообщение для L.E.O.
Вверх
Ответить с цитированием
Этот пользователь сказал cпасибо за это полезное сообщение:
Старый Добавлено: 21.07.2009, 11:09
  (#7)
vadymko
Гость
 
Аватар для vadymko

По умолчанию

Ну я так и предполагал что все окончится сортировкой ручками Но всегда хочется чуда
Вверх
Ответить с цитированием
Старый Добавлено: 21.07.2009, 12:25
  (#8)
L.E.O.
Пользователь
Пользователь
 
Аватар для L.E.O.

По умолчанию

А за чем ручками то писать сортировку? Ведь можно использовать STL (Standart Template Library), а там уже есть написаная сортировка (sort, qsort и другие). Остается только написать сравнение и все. Хотя в Borland C++ 3.1 я не знаю есть там STL или нету. Если нету, то уж придется писать сортировку и убеждаться, что компания Borland все таки плохо пишет программы и компиляторы


Помог, скажи спасибо
L.E.O. вне форума Отправить личное сообщение для L.E.O.
Вверх
Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.10
Copyright ©2000 - 2019, vBulletin Solutions, Inc. Перевод: zCarot

Время генерации страницы 0.18912 секунды с 17 запросами