Поиск заданного файла в заданной папке (путь и имя файла задаются в командной строке) - 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, что означает успешный конец работы программы.