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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 36, средняя оценка - 4.86
Gepar
 Аватар для Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
21.06.2011, 21:55     <fstream> как копировать файлы? #1
Какой функцией можно скопировать нужный файл?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2841 / 1778 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
21.06.2011, 21:57     <fstream> как копировать файлы? #2
link
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
21.06.2011, 22:00     <fstream> как копировать файлы? #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';
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,301
21.06.2011, 22:18     <fstream> как копировать файлы? #4
Наверное, правильно будет открыть файл на чтение в бинарном режиме и считывать его соответсвующим образом (методом read)- это в самом общем, случае мы ведь не знаем, какой у ТС файл. Может, у него именно бинарный (в смысле НЕтекстовый). Предложенным способом, кстати, мы перегоним в новый файл только одну строку.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
21.06.2011, 22:50     <fstream> как копировать файлы? #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) ...
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,301
21.06.2011, 22:56     <fstream> как копировать файлы? #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.

На всякий случай- какой компилятор?
Gepar
 Аватар для Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
21.06.2011, 22:57  [ТС]     <fstream> как копировать файлы? #7
И всё равно что-то не верится что стандартной функции никакой нет
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,301
21.06.2011, 23:03     <fstream> как копировать файлы? #8
Можно CopyFile
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
21.06.2011, 23:06     <fstream> как копировать файлы? #9
Gepar, придётся поверить.
можешь сам посмотреть, стандартная библиотека не подразумевает такой функции
http://www.cplusplus.com/reference/iostream/fstream/

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

kravam,
VS2008
asics
Freelance
Эксперт C++
 Аватар для asics
2841 / 1778 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
21.06.2011, 23:07     <fstream> как копировать файлы? #10
Цитата Сообщение от Gepar Посмотреть сообщение
И всё равно что-то не верится что стандартной функции никакой нет
Рас уж предложили WinAPI, то можно посмотреть и в сторону boost::filesystem::copy_file.
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,301
21.06.2011, 23:10     <fstream> как копировать файлы? #11
OstapBender, был неправ
Gepar
 Аватар для Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
22.06.2011, 15:42  [ТС]     <fstream> как копировать файлы? #12
Если уж в сторону winapi, то может проще сделать через стандартную коммандную строку (через вызов system), я правда так только очистку экрана до этого делал, если кто знает как это сделать через коммандную строку - напишите пожалуйста, в winapi пока закапываться не хочу.
Jupiter
Каратель
Эксперт C++
6545 / 3965 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.06.2011, 15:48     <fstream> как копировать файлы? #13
Gepar, а чем вам не нравится вариант из 2-го поста?
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
22.06.2011, 16:02     <fstream> как копировать файлы? #14
Gepar,
C
1
system("copy D:\\1.txt D:\\2.txt");
diagon
Higher
 Аватар для diagon
1921 / 1187 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
22.06.2011, 16:12     <fstream> как копировать файлы? #15
Как вариант
C++
1
2
3
std::ifstream in("input.txt");
std::ofstream out("output.txt");
out << in.rdbuf();
Gepar
 Аватар для Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
22.06.2011, 16:31  [ТС]     <fstream> как копировать файлы? #16
diagon, было бы круто если бы работало
OstapBender, годится, теперь бы ещё информацию о том что оно скопировало файл не показывало бы ... есть какой-то флаг чтобы не писал отчёт? Можно конечно очистить экран, но это не то так как очистится всё.

Добавлено через 49 секунд
Maxwe11, слишком длинно, да и мне надо конструкция которую не сложно запомнить и можно использовать, а так мне что ту функцию как шаблон где-то держать чтоли, это не выход.
asics
Freelance
Эксперт C++
 Аватар для asics
2841 / 1778 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
22.06.2011, 16:34     <fstream> как копировать файлы? #17
Цитата Сообщение от Gepar Посмотреть сообщение
, теперь бы ещё информацию о том что оно скопировало файл не показывало бы
Мб попробуй так, точно не уверен:
C++
1
system("copy D:\\1.txt D:\\2.txt >> void");
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2011, 16:41     <fstream> как копировать файлы?
Еще ссылки по теме:

C++ Как правильно передать объект fstream в функцию
C++ Как создавать файлы dat и вводить в них данные (при помощи fstream)?
Как задать путь для файла в fstream? C++
C++ Fstream и бинарные файлы
Как можно создать динамический массив объектов fstream? C++

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
22.06.2011, 16:41     <fstream> как копировать файлы? #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';
    }
}
Yandex
Объявления
22.06.2011, 16:41     <fstream> как копировать файлы?
Ответ Создать тему
Опции темы

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