Поиск заданного файла в заданной папке (путь и имя файла задаются в командной строке) - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый вечер! Как сделать поиск заданного файла в заданной папке(путь и имя файла задаются в командной строке) это надо сделать с помощью ф-ции findfirst findnext Вот правильный пример(но ввод не через ком. строку, а в программе)
#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[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
я так понимаю надо завести переменные(для пути и названия файла) куда поместить считанные с ком. строки параметры(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;
}

Объяснение кода листинга программы

  1. Подключение необходимых библиотек: и .
  2. Объявление переменных:
    • hFind - указывает на объект, который представляет собой файловый поиск. Изначально имеет значение INVALID_HANDLE_VALUE.
    • pFIND - структура данных, используемая функцией FindFirstFile для получения информации о файле.
  3. Проверка количества аргументов в командной строке. Если их меньше 1, выводится сообщение об ошибке.
  4. Вывод сообщения о поиске в указанной директории с использованием аргумента 1 командной строки.
  5. Формирование строки с именем файла для поиска, используя аргумент 1 командной строки. Путь к файлу формируется с помощью функции sprintf.
  6. Вызов функции FindFirstFile для начала поиска файлов в указанной директории. Результат поиска сохраняется в переменной hFind.
  7. Если поиск начался успешно (т.е. hFind не равен INVALID_HANDLE_VALUE), выводится сообщение о нахождении файлов.
  8. Используя цикл do-while, выводятся имена найденных файлов и их атрибуты (папка или файл) до тех пор, пока функция FindNextFile возвращает TRUE.
  9. После завершения цикла, вызов функции FindClose для закрытия объекта поиска.
  10. Если поиск не начался (т.е. hFind равен INVALID_HANDLE_VALUE), выводится сообщение об ошибке.
  11. Возврат 0, что означает успешный конец работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.615 из 5
Похожие ответы