Простая задача на С - 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;
}
Объяснение кода листинга программы
- Создание копии исходного файла с помощью функции
append_to_file(). - Объявление функции
append_to_file(), которая считывает символ из исходного файла и записывает его в целевой файл. - Объявление функции
main(), которая обрабатывает ввод/вывод и управляет процессом копирования. - Проверка корректности входных данных (должно быть передано ровно 2 аргумента).
- Получение текущего каталога с помощью функции
GetCurrentDirectory(). - Формирование строки
txt_files, которая содержит маску для поиска всех текстовых файлов в текущем каталоге. - Поиск первого файла, соответствующего маске, с помощью функции
FindFirstFile(). - Открытие целевого файла для записи с помощью функции
fopen(). - Проверка корректности открытия целевого файла.
- В цикле до тех пор, пока есть файлы, соответствующие маске:
10.1. Открытие текущего файла для чтения с помощью функции
_wfopen(). 10.2. Проверка корректности открытия текущего файла для чтения. 10.3. Копирование содержимого текущего файла в целевой файл с помощью функцииappend_to_file(). - Закрытие текущего файла.
- Вызов функции
FindNextFile()для поиска следующего файла, соответствующего маске. - Закрытие целевого файла.
- Закрытие дескриптора поиска.
- Возврат 0, что означает успешное выполнение программы.