Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2012, 16:44   #1
ProgRoman
 
Регистрация: 12.01.2012
Сообщений: 4
По умолчанию Обход каталога файлов

Всем привет, я недавно пишу на С++ и у меня возник такой вопрос..
Пусть нам задан путь к какой-нибудь папке все файлы которой надо просто вывести на экран что-то вроде (dir) вот погуглил и написал следующий код
Код:
LPWIN32_FIND_DATAA FindData;
HANDLE hFind;
char cstr[] = "C:\\*.*";
hFind = FindFirstFileA(cstr , FindData);
cout << FindData->cFileName << endl;
int n=0;
while (FindNextFileA(hFind, FindData))
{
	cout << FindData->cFileName << endl;
	n++;
}
FindClose(hFind);
сout<<n;
но это не рабочий код выходит такое исключение
Цитата:
Run-Time Check Failure #3 - The variable 'FindData' is being used without being initialized.
пробовал инициализировать FindData присваивал 0, но тоже получил исключение
Цитата:
Необработанное исключение в "0x76f44153" в "testapp.exe": 0xC0000005: Нарушение прав доступа при записи "0x00000000".
ProgRoman вне форума Ответить с цитированием
Старый 12.01.2012, 17:11   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

ProgRoman

LPWIN32_FIND_DATAA FindData;

The variable 'FindData' is being used without being initialized


А кто память будет выделать для данных? Пушкин? o_0
Rififi вне форума Ответить с цитированием
Старый 12.01.2012, 17:11   #3
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Код:
//LPWIN32_FIND_DATAA FindData;  //<--- убрать нафег это порно
WIN32_FIND_DATAA FindData;       //<--- Создать данные
HANDLE hFind;
char cstr[] = "C:\\*.*";
hFind = FindFirstFileA(cstr , &FindData); //<-- скормить адрес данных
//cout << FindData->cFileName << endl;
cout << FindData.cFileName << endl;  //<-- доступ через точку
int n=0;
while (FindNextFileA(hFind, &FindData)) // <-- скормить адрес данных
{
	//cout << FindData->cFileName << endl;
        cout << FindData.cFileName << endl; //<-- доступ через точку
	n++;
}
FindClose(hFind);
сout<<n;
Попробуй вот так. Если это поможет, значит проблема была в том, что ты пытался поюзать "несуществующие" данные, передавая функциям не_валидный указатель

Последний раз редактировалось _Bers; 12.01.2012 в 17:14.
_Bers вне форума Ответить с цитированием
Старый 12.01.2012, 17:43   #4
ProgRoman
 
Регистрация: 12.01.2012
Сообщений: 4
По умолчанию

спасибо всё получилось
ProgRoman вне форума Ответить с цитированием
Старый 12.01.2012, 17:53   #5
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Обращай внимание на так сказать префиксы LPWIN32_FIND_DATAA, что значит long pointer WIN32_FIND_DATAA. А для указателей нужно выделять память
coNsept вне форума Ответить с цитированием
Старый 12.01.2012, 17:56   #6
ProgRoman
 
Регистрация: 12.01.2012
Сообщений: 4
По умолчанию

ок пасиб!)
ProgRoman вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Приложение которое выводит список файлов текущего каталога и при клике на любом из файлов откроет его. LimanSSk Общие вопросы Delphi 2 18.05.2009 16:03
Обход Н/Д Slavik Microsoft Office Excel 2 09.05.2009 00:49
Как вывести на экран имена файлов текущего каталога? (С++) Darw1n Помощь студентам 1 13.12.2008 11:10
Получить список файлов выбранного каталога в MFC DPRO Visual C++ 2 17.08.2008 22:34