Чтение-запись из файла в файл - C (СИ)

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

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

Написать 2 программы копирования файлов. Имена файлов для копирования задаются в командной строке: причем 1-ый аргумент – это имя файла откуда копируют, а 2-ой аргумент - это имя файла куда надо скопировать информацию. В 1-ой программе использовать бесформатный ввод-вывод верхнего уровня. Для этого создать буфер ввода-вывода размером 8 – 16 Кб. Во 2-ой программе использовать ввод-вывод нижнего уровня. Выкладываю коды программ: 1ая
#include <stdio.h>/*подключение библиотеки ввода вывода данных*/
int main(int argc, char *argv[])
{
char * path1 = argv[1];/*путь исходного файла */
char * path2 = argv[2];/*путь файла для записи*/
int nbytes = 10000;/*количество байт в буфере*/
int readBytes;/*количесвтво прочитанных байт*/
char buf [10000];/*создание буфера*/
FILE * file1  = fopen(path1,"r");/*открытие первого файла для чтения*/
readBytes = fread(buf,1,nbytes,file1);/*считывание содержимого файла в буфер*/
FILE * file2  = fopen(path2,"a");/*открытие второго файла для записи*/
fwrite(buf,1,readBytes,file2);/*запись считанного буфера во второй файл */
fclose(file1);/*закрытие первого файла*/
fclose(file2);/*закрытие второго файла*/
return 0;
}
Код второй программы:
#include <io.h>/*подключение библиотеки ввода вывода данных*/
#include <fcntl.h>/*подключние библиотеки, содержащей флаги O_RDONLY и O_WRONLY*/
int main(int argc, char *argv[])
{
char * path1 = argv[1];/*путь исходного файла */
char * path2 = argv[2];/*путь файла для записи*/
char buf[10000];/*Создание буфера*/
int h;/*описатель*/
int nbytes = 10000;/*размер буфера*/
int readBytes;/*количесвтво прочитанных байт*/
h = open(path1,O_RDONLY);/*открытие файла для чтения*/
readBytes = read(h,buf,nbytes);/*чтение в буфер из файла*/
close(h);/*закрытие файла*/
h=open(path2,O_WRONLY);/*открытие второго файла для записи*/
write(h,buf,readBytes);/*запись считанного буфера во  второй файл */
close(h);/*закрытие второго файла*/
return 0;
}
Программы запускаются, ошибок нет. Вот только во 2ой файл информация никак не записывается, он так и остается пустым.

Подскажите в чем тут проблема,

и напишите как именно это все дело написать в командной строке, может я в записи ошибаюсь..

Решение задачи: «Чтение-запись из файла в файл»

textual
Листинг программы
FILE *f;
char s[]="a.dat";
 
struct tovar
  {
   int amount,c,debt;
   char name[40],zak[30];
  } b;
//----------------
    if ( (f=fopen(s,"ab+"))==NULL ) 
         { ShowMessage("Файла нет!");return; }  // Сообщение об ошибке открытия 
     ...
    fwrite(&b,sizeof(tovar),1,f);
    fclose(f);

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

  1. Объявляется указатель на файл f.
  2. В качестве имени файла используется строка s[], которая равна a.dat.
  3. Объявляется структура tovar, которая содержит поля: amount, c, debt, name и zak. Тип данных этих полей - int, а name и zak - char.
  4. Если файл не открывается (файл не найден или нет доступа), выводится сообщение об ошибке Файла нет! и программа возвращает управление.
  5. Запись данных в файл происходит с помощью функции fwrite(). В качестве аргументов функции передаются адрес структуры b (предполагается, что она уже инициализирована), размер структуры в байтах (sizeof(tovar)) и количество структур, которые необходимо записать в файл (1).
  6. Файл закрывается с помощью функции fclose().

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


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

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

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