Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 74, средняя оценка - 4.91
kraa
Сообщений: n/a
#1

Копирование файла C++ - C++

04.06.2012, 09:26. Просмотров 10405. Ответов 6
Метки нет (Все метки)

Привет всем.
У меня проблема такого рода, пытаюсь скопировать файл, и все вроде получается, за исключением того, что в конец файла добавляется лишний байт. Не могу понять почему, буду рад за помощь.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <fstream>
#include <iostream>
 
using namespace std;
 
int main(){
    char * buffer;
    buffer = new char;
 
    ifstream infile("c:\\123.qwe", ios::binary);
    ofstream outfile("c:\\1234.qwe", ios::binary);
    
    while (!infile.eof()){
        infile.read(buffer, sizeof(char));
        outfile.write(buffer, sizeof(char));
    }
 
    delete buffer;
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2012, 09:26     Копирование файла C++
Посмотрите здесь:

Копирование файла - C++
и если есть, как осуществить копирование нетипизированного файла в С++? вот это копирует слово с текстового файла 1 в текстовый файл...

Копирование файла - C++
Задача: Из исходного файла скопировать в новый файл текст таким образом, чтобы все символы, стоящие перед &quot;*&quot; были заменены на символ...

копирование файла - C++
недавно изучаю С++, собственно столкнулся с проблемой при копировании из одного файла в другой. проблема заключается в дублировании...

копирование файла - C++
Напишите программу копирования заданного текстового файла в другой текстовый файл с удалением пустых строк

Копирование файла C++ - C++
Всем Доброго вечера, хочу написать программу для копирования настроек браузера с комп на комп. Все компилируется, но файл не копируется,...

Копирование файла - C++
Делаю программку для копирование файла настроек оперы с\на разные операционые системы. Для копирование я узнаю имя пользователя для это я...

Копирование строк с файла - C++
Есть прога которая находит наименьшее слово в файле(находит). #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt; #include...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ps10n1ck
54 / 48 / 2
Регистрация: 10.11.2010
Сообщений: 132
04.06.2012, 11:27     Копирование файла C++ #2
Цитата Сообщение от kraa Посмотреть сообщение
C++
1
2
3
4
    while (!infile.eof()){
        infile.read(buffer, sizeof(char));
        outfile.write(buffer, sizeof(char));
    }
замени на
C++
1
2
3
4
5
infile.read(buffer, sizeof(char));
while (!infile.eof()){
    outfile.write(buffer, sizeof(char));
    infile.read(buffer, sizeof(char));
}
У тебя получается сперва считываются данные, а потом записываются и после происходит проверка на достижение конца файла. Получается считали последний байт, записали его, выполнили проверку - проверка прошла успешно. После опять читаем новый байт и тут получаем конец файла, но дальше стоит запись в файл - пишем этот лишний (последнее значение) байт в файл и только потом идет проверка на достижение конца файла.
kraa
Сообщений: n/a
04.06.2012, 12:47     Копирование файла C++ #3
Спасибо, теперь понял
Somebody
2786 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,190
Завершенные тесты: 1
04.06.2012, 13:02     Копирование файла C++ #4
А копирование делается намного проще...
C++
1
outfile << infile.rdbuf();
MrCold
854 / 752 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
04.06.2012, 13:50     Копирование файла C++ #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <fstream>
using namespace std;
 
int main () {
  int len;
  char * buffer;
 
  ifstream  infile("c:\\123.qwe", ios::binary);
  ofstream outfile("c:\\1234.qwe", ios::binary);
 
  infile.seekg (0, ios::end);
  len = infile.tellg();
  infile.seekg (0, ios::beg);
  buffer = new char [len];
 
  infile.read   (buffer,len);
  outfile.write (buffer,len);
 
  delete[] buffer;
  return 0;
}
never old
8 / 8 / 1
Регистрация: 02.06.2012
Сообщений: 25
06.06.2012, 08:33     Копирование файла C++ #6
В предыдущем примере большим файлом можно и память скушать

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <fstream>
#include <iostream>
 
using namespace std;
 
int main(){
    char * buffer;
    int len = 4096; //Выбираем размер буфера, какой нравится
 
    ifstream infile("c:\\123.qwe", ios::in | ios::binary);
    ofstream outfile("c:\\1234.qwe", ios::out | ios::binary);
    if(!infile || !outfile){ //ошибку открытия файлов стоит отслеживать, всякое бывает
        cout << "Oops...\n";
        return 1;
    }
 
    buffer = new char[len];
    while (!infile.eof()){
        infile.read(buffer, len);
        if(infile.gcount()) outfile.write(buffer, infile.gcount());
        //gcount возвращает количество байт, считанных в последний раз
        //ее и используем для проверки, что что-то считалось, а заодно устанавливаем количество записываемых байт
    }
 
    infile.close();
    outfile.close(); //позакрывали файлы
    delete[] buffer;
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2015, 16:09     Копирование файла C++
Еще ссылки по теме:

Структуры, копирование файла - C++
Подскажите, как написать программку с меню с пунктами: – посимвольное копирование файла; – построчное копирование файла; ...

Копирование из оного файла в др. - C++
Вся задача состоит не в этом, но для начала я решил сделать хотя бы, что бы числа копировались из одного файла в другой. Тесть есть...

Копирование файла в обратном порядке - C++
вот написала прогу...она копирует файл,а как зделать чтоб копировать в обратном порядке??? #include &lt;fstream&gt; #include &lt;stdlib.h&gt; ...

Копирование содержимого текстового файла - C++
Программа копирует этот файл три раза. В первый раз одна использует буфер стандартного размера, затем увеличивает размер буфера в десять...

Копирование в два и более файла - C++
Нужно сделать так чтобы когда он сохранял нам в указанный файл, и сохранял в другой файл который пользователю неизвестен, написал вроде бы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
casper007
67 / 67 / 22
Регистрация: 12.12.2013
Сообщений: 400
10.01.2015, 16:09     Копирование файла C++ #7
never old, хм, код рабочий, но пишет медленно даже если значение len установить больше.
Yandex
Объявления
10.01.2015, 16:09     Копирование файла C++
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru