Лабораторная работа: Програма для сканування каталогу на наявність відповідних файлів
struct ffblk find;
Викличемо функцію findfirst(), задавши їй у якості параметрів другий аргумент із командного рядка, посилання на структуру find та файловий атрибут.
Функція findfirst() повертає нуль у випадку успіху, тобто даний оператор if перевіряє чи виконалась функція із заданими параметрами.
if( !findfirst( argv[1], &find, FA_ARCH ) ) {
Якщо findfirst() виконалася правильно, то інформація буде занесена до структури find. Викличемо функцію print_info(), яка і надрукує структуру у відповідному форматі.
printf( "\n"
"\nFile Name Attr Date Time Size"
"\n------------ ---- ---------- -------- --------" );
print_info( &find );
}
У разі помилки findfirst() поверне -1 і виконається оператор else, який надрукує відповідну інформацію про правильність заповнення командного рядка і завершить виконання програми.
else {
printf( "\nUsage: FIND filename"
"\n Wildcards ""!"" and ""*"" is OK.\n" );
getch();
exit( -1 );
}
Функція findnext() продовжує пошук файлів, який розпочала функціяfindfirst(). Findnext() також повертає нуль у випадку успішного виконання. Тому за допомогою оператора while продовжуємо пошук до тих пір доки це можливо, тобто доки findnext () не поверне -1.
while( !findnext( &find ) )
print_info( &find );
Завершимо виконання програми.
getch();
exit( 0 );
}
Функція print_info() призначена для друку структури ffblk у відповідному зрозумілому для користувача форматі. Функція нічого не повертає. У якості парметрів приймає покажчик на структуру ffblk.
void print_info( struct ffblk *pfind ) {
Оголосимо два мив мольних масиви, які будуть зберігати відповідно час та дату у форматі рядка.
char timebuf[10], datebuf[12];
Викличемо date_conv() та time_conv() для конвертації полів дати і часу із цілочисельного формату до рядкового.