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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
ZigaZaga
0 / 0 / 0
Регистрация: 06.01.2010
Сообщений: 20
#1

Потоки ввода/вывода: дважды скопировать исходный файл - C++

21.02.2010, 13:14. Просмотров 1631. Ответов 2
Метки нет (Все метки)

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

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <fstream>
 
int main(){
    сhar ch;
    std::ifstream ifs("in.dat", std::ios::binary);
    if ( !ifs.is_open() ){
        std::cerr << "Can't open file for input!" << std::endl;
        return 1;
    }
    std::ofstream ofs("out.dat", std::ios::binary);
        if ( !ofs.is_open() ){
               std::cerr << "Can't open file for output!" << std::endl;
               return 1;
        }
    while(  ifs.read(&ch, sizeof(ch)))
    {
        if ( ifs.bad() ){
             std::cerr << "Can't read from file!" << std::endl;
                     return 1;
        }
        ofs.write(&ch, sizeof(ch));
        if ( ofs.bad() ){
             std::cerr << "Can't write to file!" << std::endl;
                     return 1;
        }
        }
    ifs.seekg(0,std::ios::beg);
        while(  ifs.read(&ch, sizeof(ch))) // в этот цикл почему то не заходит!!!!!!!!!!!!!!!!!!
    {
        if ( ifs.bad() ){
            std::cerr << "Can't read from file!" << std::endl;
                    return 1;
        }
        ofs.write(&ch, sizeof(ch));
        if ( ofs.bad() ){
            std::cerr << "Can't write to file!" << std::endl;
                    return 1;
        }
        }
    ofs.close();
        ifs.close();
        return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2010, 13:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Потоки ввода/вывода: дважды скопировать исходный файл (C++):

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

Что такое потоки ввода, потоки вывода? - C++
Здарова всем! Не так давно уже прогаю на С++ и все НИКАК не могу понять, что такое потоки ввода, потоки вывода..! вот допустим...

Потоки ввода вывода - C++
Почему с помощью классов ostream и istream нельзя создавать свои потоки ввода вывода? std::ostream output; output &lt;&lt; &quot;String&quot;; К...

Потоки ввода-вывода - C++
1) Типы данных, для которых перегружены операторы форматного ввода-вывода.

Потоки ввода-вывода в С++ - C++
Ребят, нужна помощь В программирование я новичок, но сдать нужно 1. Написать программу, печатающую символы. Использовать цикл while....

Используя потоки ввода/вывода в С++ - C++
Здравствуйте помогите организовать запись информации из массива объектов в класс, чтение данной информации из класса, ввод информации с...

2
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
21.02.2010, 14:55 #2
Когда файл полностью считан, устанавливается флаг конца файла eof. А если кокой-либо флаг состояния установлен (eof, bad, fail, короме good) дальнейшая работа с потоком невозможна. Для этого применяется функция clear(), которая сбрасывает флаги состояний.
1
easybudda
Модератор
Эксперт CЭксперт С++
9664 / 5614 / 952
Регистрация: 25.07.2009
Сообщений: 10,778
21.02.2010, 16:16 #3
Ещё один вариант. Копирует содержимое входного файла в выходной заданное количество раз.
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <fstream>
 
int main(){
    std::string fin_name, fout_name;
    int ccount;
    
    std::cout << "Input file name: ";
    std::cin >> fin_name;
    std::cout << "Output file name: ";
    std::cin >> fout_name;
    std::cout << "Copyes needed: ";
    std::cin >> ccount;
    
    std::ifstream fin(fin_name.c_str(), std::ios::binary);
    if ( !fin.is_open() ){
        std::cerr << "Can't open file <" << fin_name << "> for input!" << std::endl;
        return 1;
    }
    size_t buf_size;
    fin.seekg(0, std::ios::end);
    buf_size = fin.tellg();
    fin.seekg(0, std::ios::beg);
    
    char *buf = new char [ buf_size ];
    fin.read(buf, buf_size);
    if ( fin.bad() ){
        std::cerr << "Can't read from file!" << std::endl;
        return 1;
    }
    fin.close();
    
    std::ofstream fout(fout_name.c_str(), std::ios::binary);
    if ( !fout.is_open() ){
        std::cerr << "Can't open file <" << fout_name << "> for output!" << std::endl;
        return 1;
    }
    while ( ccount-- ){
        fout.write(buf, buf_size);
        if ( fout.bad() ){
            std::cerr << "Can't write to file!" << std::endl;
            return 1;
        }
    }
    fout.close();
    delete [] buf;
    
    std::cout << "Done." << std::endl;
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2010, 16:16
Привет! Вот еще темы с ответами:

Непонятная ошибка. Потоки ввода/вывода - C++
Решал задачу и столкнулся с проблемой (первый день на c++ &quot;пишу&quot;) не пойму что за ошибка #include &quot;stdafx.h&quot; #include &lt;iostream&gt; ...

Текстовые файлы и потоки ввода/вывода - C++
Доброго времени суток. Уважаемый гуру, не могли бы вы мне помочь с решением данной программы. Алгоритм знаю, но никак не могу его...

Переделать потоки ввода-вывода на prinf и scanf - C++
#include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; int x,y,i,j,n1,m1,n2,m2,z; void cret(void) { cout&lt;&lt;&quot;\nVvedit...

Запустить интерпретатор bash, получить потоки ввода вывода - C++
Здравствуйте, мне необходимо в своей программе запустить интерпретатор bash, и получить стандартные потоки ввода/вывода, для того чтобы...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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