Форум: Форум C++Разное
Новые темы: 00
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Копирование двоичных файлов
 
 автор: DDK   (18.02.2007 в 15:56)   письмо автору
 
 

Есть задача: скопировать файл в двоичном режиме, вставляя в выходной файл (создаем пустой, в него и копируем) после каждых 512 байт пустые 8 байт. Делаю так:


#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <string.h>

FILE *fin, *fout;

main(int argc, char *argv[]) {

unsigned char *buffer = new char[512];

if(argc < 3) {
cout << "File execute error";
}
fin = fopen(argv[1], "rb");
fout = fopen(argv[2], "w+b");
while(feof(fin)) {
fread(&buffer, 512, 1, fin);
fwrite(&buffer, 512, 1, fout);
fread(&buffer, 8, 1, fout);
}
cout << "Ok !";
return 0;
}


Что не так делаю ?

  Ответить  
 
 автор: cheops   (18.02.2007 в 16:56)   письмо автору
 
   для: DDK   (18.02.2007 в 15:56)
 

А вот эта строка
fread(&buffer, 8, 1, fout);

для чего?

  Ответить  
 
 автор: DDK   (18.02.2007 в 18:12)   письмо автору
 
   для: cheops   (18.02.2007 в 16:56)
 

для смещения указателя в файле на 8 байт, чтобы их пропустить (задача в этом). Пробовал заменять на fseek, ничего не менялось.

  Ответить  
 
 автор: Trianon   (18.02.2007 в 23:27)   письмо автору
 
   для: DDK   (18.02.2007 в 18:12)
 

Скорее вместо этой строки

fread(&buffer, 8, 1, fout);

напрашивается строка

fwrite(zero, 8, 1, fout);

Где zero описан выше примерно так:

static char zero[8];

  Ответить  
 
 автор: alex19921992   (28.02.2007 в 04:46)   письмо автору
 
   для: DDK   (18.02.2007 в 18:12)
 

А нельзя просто сделать вот так:

fprintf(fin,"\0\0\0\0\0\0\0\0");

  Ответить  
 
 автор: Trianon   (01.03.2007 в 13:55)   письмо автору
 
   для: alex19921992   (28.02.2007 в 04:46)
 

Нельзя. Первый же нуль будет воспринят как символ конца строки.

  Ответить  
 
 автор: DDK   (19.02.2007 в 00:24)   письмо автору
 
   для: DDK   (18.02.2007 в 15:56)
 

Спасибо, сам справился :) поколупался, поколупался... и родил.

  Ответить  
 
 автор: Shishkin   (27.02.2007 в 17:21)   письмо автору
 
   для: DDK   (19.02.2007 в 00:24)
 

Нужно :
while (!feof(fin))
; )

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования