Простая задача на С - C (СИ) (155887)

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

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

Написать программу которая в начальной директории ищет все .txt файлы и объединяет их в один. Нужна очень срочно...

Решение задачи: «Простая задача на С»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
 
void append_to_file(FILE *from, FILE *to)
{
    int ch;
    while (1)
    {
        ch = fgetc(from);
        if (ch == EOF)
            break;
        fputc(ch, to);
    }
}
 
int main(int argc, char *argv[])
{
    WIN32_FIND_DATA findFileData;
    FILE *fileFrom, *fileTo;
    HANDLE hFind;
    wchar_t current_directory[MAX_PATH];
    wchar_t txt_files[MAX_PATH + 6];
    if (argc != 2)
    {
        fputs("The number of arguments must be equal to 2", stderr);
        exit(1);
    }
    
    GetCurrentDirectory(MAX_PATH, current_directory);
    wcscpy(txt_files, current_directory);
    wcscat(txt_files, L"\\*.txt");
 
    hFind = FindFirstFile(txt_files, &findFileData);
 
    if(hFind  == INVALID_HANDLE_VALUE) 
    {
        printf("%ls", txt_files);
        fputs("Can not find text files", stderr);
        exit(1);
    }
 
    fileTo = fopen(argv[1], "wb");
 
    if (!fileTo)
    {
        fprintf(stderr, "Could not open %s file", argv[1]);
        exit(1);
    }
 
    do
    {
        fileFrom = _wfopen(findFileData.cFileName, L"rb");
        if (!fileFrom)
        {
            fprintf(stderr, "Could not open %ls file", findFileData.cFileName);
            exit(1);
        }
        else
            append_to_file(fileFrom, fileTo);
    }
    while(FindNextFile(hFind, &findFileData));
    fclose(fileFrom);
    fclose(fileTo);
    FindClose(hFind);
    return 0;
}

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

  1. Создание копии исходного файла с помощью функции append_to_file().
  2. Объявление функции append_to_file(), которая считывает символ из исходного файла и записывает его в целевой файл.
  3. Объявление функции main(), которая обрабатывает ввод/вывод и управляет процессом копирования.
  4. Проверка корректности входных данных (должно быть передано ровно 2 аргумента).
  5. Получение текущего каталога с помощью функции GetCurrentDirectory().
  6. Формирование строки txt_files, которая содержит маску для поиска всех текстовых файлов в текущем каталоге.
  7. Поиск первого файла, соответствующего маске, с помощью функции FindFirstFile().
  8. Открытие целевого файла для записи с помощью функции fopen().
  9. Проверка корректности открытия целевого файла.
  10. В цикле до тех пор, пока есть файлы, соответствующие маске: 10.1. Открытие текущего файла для чтения с помощью функции _wfopen(). 10.2. Проверка корректности открытия текущего файла для чтения. 10.3. Копирование содержимого текущего файла в целевой файл с помощью функции append_to_file().
  11. Закрытие текущего файла.
  12. Вызов функции FindNextFile() для поиска следующего файла, соответствующего маске.
  13. Закрытие целевого файла.
  14. Закрытие дескриптора поиска.
  15. Возврат 0, что означает успешное выполнение программы.

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


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

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

6   голосов , оценка 4 из 5