При помощи потоков можно читать сразу блоки данных, но для начала я решил рассмотреть пример такой утилиты с побайтовым копированием.
Прежде всего нам необходмо подключить потоковые библиотеки С++ и оприделить пространство имён.
#include <iostream> #include <fstream> using namespace std;
Теперь перейдём к телу функции main(). Прежде всего оприделим два потока: один для ввода данных (считывания из исходного файла), другой — для вывода (записи).
ifstream in("file.mp3", ios::in | ios::binary); ofstream out("copy.mp3", ios::out | ios::binary);
Первый параметр — имя открываемого файла. Второй — побитовая сумма параметров. В нашем случае:
- ios::in — поток для ввода данных
- ios::out — поток для вывода данных
- ios::binary — данные будут считаны в бинарном формате (без преобразования символов)
После определения потоков, проверим корректность выполнения открытия файлов:
if (!in){ cout << "Не удалось открыть файл\n"; return 1; } if (!out) { cout << "Не удалось создать файл\n"; return 2; }
Объявим переменную-буфер (смешно её так называть.. 1 байт):
char ch;
В цикле копируем данные:
while (in) { in.get(ch); if (in) out.put(ch); }
Закрываем открытые потоки:
in.close(); out.close();
Ну и как положено по стандарту:
return 0;
Вот и всё… Мой mp3 файл был скопирован безупречно!