Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/57: Рейтинг темы: голосов - 57, средняя оценка - 4.88
1184 / 540 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
1

<fstream> как копировать файлы?

21.06.2011, 21:55. Показов 11892. Ответов 17
Метки нет (Все метки)

Какой функцией можно скопировать нужный файл?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.06.2011, 21:55
Ответы с готовыми решениями:

Как создавать файлы dat и вводить в них данные (при помощи fstream)?
как создавть файлы .dat и вводить в них данные

Файлы FILE и fstream
Подскажите, пожалуйста. В большинстве примеров и прочей не сильно официальной литературе при...

Fstream и бинарные файлы
Необходимо скопировать картинку. Не знаю как сделать.

Fstream и бинарные файлы
вообщем вопрос такой.. как читать строки из бинарного файла, и как записывать в бинарный файл...

17
Freelance
Эксперт С++
2880 / 1815 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
21.06.2011, 21:57 2
link
1
591 / 529 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
21.06.2011, 22:00 3
Gepar, нет такой функции.
C++
1
2
3
4
5
6
7
    std::ifstream ifs("1.txt");
    std::ofstream ofs("2.txt");
 
    std::string str;
 
    while (std::getline(ifs,str))
        ofs << str << '\n';
0
быдлокодер
1721 / 908 / 106
Регистрация: 04.06.2008
Сообщений: 5,631
21.06.2011, 22:18 4
Наверное, правильно будет открыть файл на чтение в бинарном режиме и считывать его соответсвующим образом (методом read)- это в самом общем, случае мы ведь не знаем, какой у ТС файл. Может, у него именно бинарный (в смысле НЕтекстовый). Предложенным способом, кстати, мы перегоним в новый файл только одну строку.
0
591 / 529 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
21.06.2011, 22:50 5
Цитата Сообщение от kravam Посмотреть сообщение
Наверное, правильно будет открыть файл на чтение в бинарном режиме и считывать его соответсвующим образом (методом read)- это в самом общем, случае мы ведь не знаем, какой у ТС файл. Может, у него именно бинарный (в смысле НЕтекстовый)
да, это так.

Цитата Сообщение от kravam Посмотреть сообщение
Предложенным способом, кстати, мы перегоним в новый файл только одну строку.
нет, я проверил же перед тем как кинуть.

getline возвращает поток, т.е запись аналогична
C++
1
2
3
4
5
    while (ifs) {
        std::getline(ifs,str);
        if (ifs.fail()) break;
        ofs << str << '\n';
    }
или более лаконично while (1) ...
0
быдлокодер
1721 / 908 / 106
Регистрация: 04.06.2008
Сообщений: 5,631
21.06.2011, 22:56 6
Я блин бился-бился над тем, как текстовый файл в строку перегнать, а тут раз- и в дамки....
+++++++++++++++++++++++++++++++++++++++
http://www.cplusplus.com/reference/string/getline/

Цитата:
istream& getline ( istream& is, string& str );
....
The delimiter character is delim for the first function version,
and '\n' (newline character) for the second.

На всякий случай- какой компилятор?
0
1184 / 540 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
21.06.2011, 22:57  [ТС] 7
И всё равно что-то не верится что стандартной функции никакой нет
0
быдлокодер
1721 / 908 / 106
Регистрация: 04.06.2008
Сообщений: 5,631
21.06.2011, 23:03 8
Можно CopyFile
0
591 / 529 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
21.06.2011, 23:06 9
Gepar, придётся поверить.
можешь сам посмотреть, стандартная библиотека не подразумевает такой функции
http://www.cplusplus.com/refer... m/fstream/

сторонние штуки типа Api или QFile такие функции имеют...

kravam,
VS2008
0
Freelance
Эксперт С++
2880 / 1815 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
21.06.2011, 23:07 10
Цитата Сообщение от Gepar Посмотреть сообщение
И всё равно что-то не верится что стандартной функции никакой нет
Рас уж предложили WinAPI, то можно посмотреть и в сторону boost::filesystem::copy_file.
1
быдлокодер
1721 / 908 / 106
Регистрация: 04.06.2008
Сообщений: 5,631
21.06.2011, 23:10 11
OstapBender, был неправ
0
1184 / 540 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
22.06.2011, 15:42  [ТС] 12
Если уж в сторону winapi, то может проще сделать через стандартную коммандную строку (через вызов system), я правда так только очистку экрана до этого делал, если кто знает как это сделать через коммандную строку - напишите пожалуйста, в winapi пока закапываться не хочу.
0
Каратель
Эксперт С++
6601 / 4020 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
22.06.2011, 15:48 13
Gepar, а чем вам не нравится вариант из 2-го поста?
0
591 / 529 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
22.06.2011, 16:02 14
Gepar,
C
1
system("copy D:\\1.txt D:\\2.txt");
1
Higher
1947 / 1213 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
22.06.2011, 16:12 15
Как вариант
C++
1
2
3
std::ifstream in("input.txt");
std::ofstream out("output.txt");
out << in.rdbuf();
0
1184 / 540 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
22.06.2011, 16:31  [ТС] 16
diagon, было бы круто если бы работало
OstapBender, годится, теперь бы ещё информацию о том что оно скопировало файл не показывало бы ... есть какой-то флаг чтобы не писал отчёт? Можно конечно очистить экран, но это не то так как очистится всё.

Добавлено через 49 секунд
Maxwe11, слишком длинно, да и мне надо конструкция которую не сложно запомнить и можно использовать, а так мне что ту функцию как шаблон где-то держать чтоли, это не выход.
0
Freelance
Эксперт С++
2880 / 1815 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
22.06.2011, 16:34 17
Цитата Сообщение от Gepar Посмотреть сообщение
, теперь бы ещё информацию о том что оно скопировало файл не показывало бы
Мб попробуй так, точно не уверен:
C++
1
system("copy D:\\1.txt D:\\2.txt >> void");
0
В астрале
Эксперт С++
8033 / 4790 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
22.06.2011, 16:41 18
Лучший ответ Сообщение было отмечено как решение

Решение

Gepar, Ну вообще-то пример diagon работает...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <boost/filesystem/fstream.hpp>
#include <iostream>
 
namespace fs = boost::filesystem;
 
int main()
{
    try
    {
       fs::path from("abc.txt");
       fs::path to("abcd.txt");
       fs::copy_file(from, to);
    }
    catch(const fs::filesystem_error& e)
    {
       std::cerr << e.what() << '\n';
    }
}
3
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.06.2011, 16:41

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Как копировать залочены эксплорером файлы
Интернет эксплорер загружая поточное видео (файлы с YouTube и пр. сайтов), в каталоге временных...

Запись/чтение структур (файлы) + разница между FILE * и <fstream>
Всем привет. Порыскал по форуму, погуглил... Решения есть, но они не ясны (что, почему да как) и не...

Копировать, перенести, удалить файлы в C++
Здравствуйте ребята, я новичок в С++, и мне нужен ваш совет, как профессиональных программистов. Я...

Как работает write в fstream?
есть файл с текстом: fstream f(&quot;f.txt&quot;,ios::in); надо его разделить его на части по сколько-то...


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

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

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