Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Проба пера


Автор: Дшпыук 6.3.2010, 19:31
ТАк сказать проба пера. Первая программа на С++ не могу понять где ошибка, основное подозрение на косячное считывание директорий, либо обработки ini`шника

Код


char *IniRead(char *filename, char *section, char *key){
 char *out = new char[512];
 GetPrivateProfileString(
 (LPCSTR)section,
 (LPCSTR)key,
 NULL,
 out,
 200,
 (LPCSTR)filename
 );
 return out;
}

bool IniWrite(char *filename, char *section, char *key, char *data){
 return WritePrivateProfileString(
 (LPCSTR)section,
 (LPCSTR)key,
 (LPCSTR)data,
 (LPCSTR)filename
 );

int main(){
...........................................
    WIN32_FIND_DATA f;
    HANDLE arf = FindFirstFile("./res/progs/",&f);
    char *fname[100];
    printf("%d",lab_compl);

    while((FindNextFile(arf,&f)) != false){
        FindNextFile(arf,&f);
        char* os = itoa(lab_compl,os,10);
        fname[lab_compl] = IniRead("./res/conf.ini", os ,"name");
        cout << f.cFileName << endl;
        ++lab_compl;
        }
    FindClose(arf);
...........................................
}


Компиляет, но при запуске вылетает с ошибкой.
Код

Сигнатура проблемы:
  Имя события проблемы:    APPCRASH
  Имя приложения:    iniReadWrite.exe
  Версия приложения:    0.0.0.0
  Отметка времени приложения:    4b928314
  Имя модуля с ошибкой:    iniReadWrite.exe
  Версия модуля с ошибкой:    0.0.0.0
  Отметка времени модуля с ошибкой:    4b928314
  Код исключения:    c0000005
  Смещение исключения:    000500a0
  Версия ОС:    6.1.7600.2.0.0.256.1
  Код языка:    1049
  Дополнительные сведения 1:    0a9e
  Дополнительные сведения 2:    0a9e372d3b4ad19135b953a78882e789
  Дополнительные сведения 3:    0a9e
  Дополнительные сведения 4:    0a9e372d3b4ad19135b953a78882e789


В аттаче полный проект. Да ###кода полно, но я только учусь) Всё будет позже... Пока пытаюсь лишь исправить эту ошибку.

Автор: cvid 7.3.2010, 10:23
Цитата

while((FindNextFile(arf,&f)) != false){
        FindNextFile(arf,&f);


Че-то как-то не так)) Зачем второй раз функцию FindNextFile вызывать? Её и так цикл на каждой итерации вызывает. А так получается, что первый вызов вернул true, условие whil'a удовлетворено, а второй вызов, допустим, вернул false (файлы кончились), а ты это дело обработать пытаешься.

Автор: xvr 7.3.2010, 12:23
Вот это FindFirstFile("./res/progs/",&f); должно быть как минимум таким FindFirstFile(".\\res\\progs\\*",&f);
Что говорит отладчик, где именно ломается?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)