Чтение-запись из файла в файл - C (СИ)
Формулировка задачи:
Написать 2 программы копирования файлов.
Имена файлов для копирования задаются в командной строке: причем 1-ый аргумент – это имя файла откуда копируют, а 2-ой аргумент - это имя файла куда надо скопировать информацию.
В 1-ой программе использовать бесформатный ввод-вывод верхнего уровня. Для этого создать буфер ввода-вывода размером
8 – 16 Кб.
Во 2-ой программе использовать ввод-вывод нижнего уровня.
Выкладываю коды программ: 1ая
Код второй программы:
Программы запускаются, ошибок нет. Вот только во 2ой файл информация никак не записывается, он так и остается пустым.
#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;
}Подскажите в чем тут проблема,
и напишите как именно это все дело написать в командной строке, может я в записи ошибаюсь..Решение задачи: «Чтение-запись из файла в файл»
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);
Объяснение кода листинга программы
- Объявляется указатель на файл
f. - В качестве имени файла используется строка
s[], которая равнаa.dat. - Объявляется структура
tovar, которая содержит поля:amount,c,debt,nameиzak. Тип данных этих полей -int, аnameиzak-char. - Если файл не открывается (файл не найден или нет доступа), выводится сообщение об ошибке
Файла нет!и программа возвращает управление. - Запись данных в файл происходит с помощью функции
fwrite(). В качестве аргументов функции передаются адрес структурыb(предполагается, что она уже инициализирована), размер структуры в байтах (sizeof(tovar)) и количество структур, которые необходимо записать в файл (1). - Файл закрывается с помощью функции
fclose().