|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Кучка (heap) |
|
C/C++ - Кучка (heap)
|
Старожил Сообщения: 361 |
Профиль | Отправить PM | Цитировать Здравствуйте!
Меня интересует как в программе на Си обрабатывать кучу файлов, заданных по маске параметром командной строки как один входной источник? (файлы не копируются друг в друга! в любой момент времени мы должны точно значть из какого именно файла мы считываем) Синтаксис запуска, например, таков: myprogram.exe *.TEXT При таком запуске программа должна обрабатывать в качестве входного потока все файлы с расширением .TEXT, которые лежат в папке с ней. Товарищи Керниган и Ритчи предлагают только filecopy... (( |
|
Отправлено: 20:51, 13-04-2010 |
Старожил Сообщения: 361
|
Профиль | Отправить PM | Цитировать Написал совсем по-человечески:
O.C /* Љ®¬ЇЁ«пв®а п§лЄ* Ћ (o.c) */ #define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <stdio.h> #include <io.h> #include <time.h> #include <string.h> #include "text.h" #include "scan.h" #include "scan.h" #include "location.h" #include "pars.h" #include "error.h" void Init(void) { ResetText(); if( ResetError ) Error(Message); InitScan(); } void Done(void) { CloseText(); } int main(int argc, char *argv[]) { struct _finddata_t c_file; intptr_t hFile; puts("\n бла-бла-бла"); if( argc <= 1 ) Mask = NULL; else Mask = argv[1]; hFile = _findfirst( Mask, &c_file ); if( (hFile = _findfirst( Mask, &c_file )) == -1L ) { printf( "%s", "Файлов, удовлетворяющих маске " ); printf( "%s", Mask ); printf( "%s", "не найдено.\n" ); } else { do { strcpy(Path, &c_file.name); Init(); Compile(); Done(); } while( _findnext( hFile, &c_file ) == 0 ); _findclose( hFile ); } return 0; } char ResetError = TRUE; char* Message = "”*©« *Ґ ®вЄалв"; int Ch = chEOT; static FILE *f; void NextCh() { if( (Ch = fgetc(f)) == EOF ) Ch = chEOT; else if( Ch == '\n' ) { //readln(f);// ?? // puts(""); Line++; Pos = 0; Ch = chEOL; } else if( Ch == '\r' ) NextCh(); else if( Ch != '\t' ) { // putchar(Ch); Pos++; } // else // do // putchar(' '); // while( ++Pos % TABSIZE ); } void ResetText() { if( Path == NULL ) { puts("Запуск*:\n MyProgram.exe <вход. файл>"); exit(1); } else if( (f = fopen(Path, "r")) == NULL ){ ResetError = TRUE; Message = "Что-то пошло не так с открытием файла*"; } else { ResetError = FALSE; Message = "Ok"; Pos = 0; Line = 1; NextCh(); } } Теперь первый файл по маске программа читает нормально, а вот когда под маску подпадают несколько файлов, то когда дело доходит до второго возникает ошибка: Ошибка возникает на втором файле, т.к. я пробовал выводить значение переменной Path когда они присваиваются - выдало 1-е имя файла из папки, удовлетворяющее маске и 2-е, потом ошибка. В чём причина неполадки? Почему программа не хочет обрабатывать последующие файлы? (их имена она определяет правильно) При компиляции проекта в MS Visual Studio 2008 ошибок не возникало... Помогите. |
Отправлено: 20:11, 11-05-2010 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
heap @ c++ stl | pva | Программирование и базы данных | 10 | 12-04-2005 15:58 |
|