Поиск заданного файла в заданной папке (путь и имя файла задаются в командной строке) - C (СИ)
Формулировка задачи:
Добрый вечер!
Как сделать поиск заданного файла в заданной папке(путь и имя файла задаются в командной строке)
это надо сделать с помощью ф-ции findfirst findnext
Вот правильный пример(но ввод не через ком. строку, а в программе)
Вот пример как получить аргументы из командной строки
(argv[0]- это название файла запускаемого) т.е. в argv[1]- надо написать путь , а в argv[2]-имя файла
или же это поместить в одно
Как мне объединить эти 2 программы?(т.е. чтобы в параметр ф-ции findfirst вместо "D:\\*.txt" записывался введенный с командной строки путь к файлу )
Вот как
Предположим, что вы запускаете программу ARGS.EXE со следующей командной строкой:
C:> args first_arg
Значение argc равно 2
В командной строке содержится 2 параметрf
argv[0]: c:\turboc\testargs.exe
argv[1]: first_arg
#include <stdio.h> #include <dir.h> int main(void) { struct ffblk ffblk; int done; printf("Листинг каталога d\n"); done = findfirst("D:\\*.txt",&ffblk,0); while (!done) { printf(" %s\n", ffblk.ff_name); done = findnext(&ffblk); } return 0;
#include <stdio.h> #include <stdlib.h> void main(int argc, char *argv[]) { int i; printf("Значение argc равно %d \n\n",argc); printf("В командной строке содержится %d параметров \n\n",argc); for (i=0; i<=argc; i++) printf(" argv[%d]: %s\n",i,argv[i]); }
я так понимаю надо завести переменные(для пути и названия файла) куда поместить считанные с ком. строки параметры(argv[1] argv[2]) их склеить(и добавить между путем и файлом \) . и это как-то поместить в функцию findfirst findnext
Решение задачи: «Поиск заданного файла в заданной папке (путь и имя файла задаются в командной строке)»
textual
Листинг программы
#include <windows.h> #include <stdio.h> int main(int argc, char *argv[]) { HANDLE hFind = INVALID_HANDLE_VALUE; WIN32_FIND_DATA pFIND = {0}; if(argc == 1) printf("To less of arguments\n"); else { printf("search in dir : %s\n",argv[1]); sprintf(pFIND.cFileName,"%s\\*.*",argv[1]); hFind = FindFirstFile(pFIND.cFileName,&pFIND); if(hFind != INVALID_HANDLE_VALUE) { printf("Founded pathes\n"); do { printf("\t%32s - ",pFIND.cFileName); if(pFIND.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) printf("<DIR>\n"); else printf("<FILE>\n"); } while(FindNextFile(hFind,&pFIND)); FindClose(hFind); } } return 0; }
Объяснение кода листинга программы
- Подключение необходимых библиотек:
и . - Объявление переменных:
- hFind - указывает на объект, который представляет собой файловый поиск. Изначально имеет значение INVALID_HANDLE_VALUE.
- pFIND - структура данных, используемая функцией FindFirstFile для получения информации о файле.
- Проверка количества аргументов в командной строке. Если их меньше 1, выводится сообщение об ошибке.
- Вывод сообщения о поиске в указанной директории с использованием аргумента 1 командной строки.
- Формирование строки с именем файла для поиска, используя аргумент 1 командной строки. Путь к файлу формируется с помощью функции sprintf.
- Вызов функции FindFirstFile для начала поиска файлов в указанной директории. Результат поиска сохраняется в переменной hFind.
- Если поиск начался успешно (т.е. hFind не равен INVALID_HANDLE_VALUE), выводится сообщение о нахождении файлов.
- Используя цикл do-while, выводятся имена найденных файлов и их атрибуты (папка или файл) до тех пор, пока функция FindNextFile возвращает TRUE.
- После завершения цикла, вызов функции FindClose для закрытия объекта поиска.
- Если поиск не начался (т.е. hFind равен INVALID_HANDLE_VALUE), выводится сообщение об ошибке.
- Возврат 0, что означает успешный конец работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д