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

Из переменной типа std::string записать в файл большое количество данных (2 Mb) - C++

Восстановить пароль Регистрация
 
Nik-
19 / 19 / 9
Регистрация: 12.07.2015
Сообщений: 322
19.02.2016, 18:25     Из переменной типа std::string записать в файл большое количество данных (2 Mb) #1
Нужно записать в файл большое количество данных. Предполагается, что в переменной большое количество строк следовательно `>>` не подойдет(если только не в цикле). как это сделать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gru74ik
Модератор
 Аватар для gru74ik
3119 / 1345 / 167
Регистрация: 20.02.2013
Сообщений: 3,819
Записей в блоге: 17
19.02.2016, 18:39     Из переменной типа std::string записать в файл большое количество данных (2 Mb) #2
Цитата Сообщение от Nik- Посмотреть сообщение
записать в файл
Записать в файл откуда?

Цитата Сообщение от Nik- Посмотреть сообщение
большое количество данных
Насколько большое?
Nik-
19 / 19 / 9
Регистрация: 12.07.2015
Сообщений: 322
19.02.2016, 19:05  [ТС]     Из переменной типа std::string записать в файл большое количество данных (2 Mb) #3
Из string. Возможно больше 2 мб, но обычно <= 1мб.
Nosey
 Аватар для Nosey
1184 / 351 / 102
Регистрация: 22.10.2014
Сообщений: 786
Завершенные тесты: 2
19.02.2016, 19:58     Из переменной типа std::string записать в файл большое количество данных (2 Mb) #4
Nik-,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <fstream>
#include <iterator>
#include <algorithm>
 
int main()
{
    std::string outString = "qwerasd asd asf sa ffsd f\n"
            "ssadf sdf sadf sa fsdf sdf sddf \n"
            "s fsadf sad fsad fsd fasdf sdf \n";
    std::ofstream outFile("file");
 
    std::copy(std::begin(outString), std::end(outString),
            std::ostreambuf_iterator<char>(outFile));
    return 0;
}
Nik-
19 / 19 / 9
Регистрация: 12.07.2015
Сообщений: 322
19.02.2016, 20:44  [ТС]     Из переменной типа std::string записать в файл большое количество данных (2 Mb) #5
Пишет, что данные ф-ции не найдены. Я изменил на
C++
1
2
std::copy(outString.begin(), outString.end(),
            std::ostreambuf_iterator<char>(outFile));
, и теперь в файле ничего не остается, просто становится пустым.
GbaLog-
Не Эксперт C++
1474 / 619 / 174
Регистрация: 24.08.2014
Сообщений: 2,527
Записей в блоге: 1
Завершенные тесты: 2
19.02.2016, 20:47     Из переменной типа std::string записать в файл большое количество данных (2 Mb) #6
Nik-,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <fstream>
#include <iterator>
#include <algorithm>
 
int main()
{
    std::string outString = "qwerasd asd asf sa ffsd f\n"
            "ssadf sdf sadf sa fsdf sdf sddf \n"
            "s fsadf sad fsad fsd fasdf sdf \n";
    std::ofstream outFile("file");
 
    std::copy(outString.begin(),outString.end(),
            std::ostream_iterator<char>(outFile));
    return 0;
}
Nik-
19 / 19 / 9
Регистрация: 12.07.2015
Сообщений: 322
19.02.2016, 20:51  [ТС]     Из переменной типа std::string записать в файл большое количество данных (2 Mb) #7
Ой, это ошибка в коде. Получилось, спасибо.

Добавлено через 2 минуты
Но он все же обрезает строку, а теперь вообще все, крому одного символа. ВОт мой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ifstream f(pathToFile);
 
    string data1;
    while(!f.eof())
        getline(f , data1);
 
    f.close();
    ofstream review1(pathToFile, ofstream::trunc);
    Form1->ADOQuery1->First();
    for(int i = 0; i<strNumber; i++)
    {
        Form1->ADOQuery1->Next();
    }
 
    data1.erase(virPlace, virLenght);
 
    copy(data1.begin(), data1.end(), ostreambuf_iterator<char>(review1));
    review1.close();
GbaLog-
Не Эксперт C++
1474 / 619 / 174
Регистрация: 24.08.2014
Сообщений: 2,527
Записей в блоге: 1
Завершенные тесты: 2
19.02.2016, 20:52     Из переменной типа std::string записать в файл большое количество данных (2 Mb) #8
Цитата Сообщение от Nik- Посмотреть сообщение
C++
1
copy(data1.begin(), data1.end(), ostreambuf_iterator<char>(review1));
C++
1
copy(data1.begin(), data1.end(), ostream_iterator<char>(review1));
Nik-
19 / 19 / 9
Регистрация: 12.07.2015
Сообщений: 322
19.02.2016, 20:55  [ТС]     Из переменной типа std::string записать в файл большое количество данных (2 Mb) #9
Нет, все так же обрезает.
Nosey
 Аватар для Nosey
1184 / 351 / 102
Регистрация: 22.10.2014
Сообщений: 786
Завершенные тесты: 2
19.02.2016, 21:02     Из переменной типа std::string записать в файл большое количество данных (2 Mb) #10
makfak,
ostreambuf_iterator - неформатированный вывод.
ostream_iterator - форматированный.
Для вывода строки как есть, лучше использовать первый вариант.

Nik-, Смотрите ваш код в дебагере, в вашей логике ошибка, по приведённому коду я ничего не понимаю.
GbaLog-
Не Эксперт C++
1474 / 619 / 174
Регистрация: 24.08.2014
Сообщений: 2,527
Записей в блоге: 1
Завершенные тесты: 2
19.02.2016, 21:03     Из переменной типа std::string записать в файл большое количество данных (2 Mb) #11
Цитата Сообщение от Nik- Посмотреть сообщение
C++
1
2
3
string data1;
* * while(!f.eof())
* * * * getline(f , data1);
После этого цикла в строке data1 остаётся последняя строка файла.

Добавлено через 34 секунды
Nosey, Да? Ну ладно.
Nik-
19 / 19 / 9
Регистрация: 12.07.2015
Сообщений: 322
19.02.2016, 23:17  [ТС]     Из переменной типа std::string записать в файл большое количество данных (2 Mb) #12
Не понимаю, что не понятного. Этот код немного для определенной цело, но кратко так: записываем ИЗ файла в string, удаляем нужный кусок из этой переменной и записываем обратно измененные данный а файл, предварительно очистив его.

Добавлено через 22 минуты
Я понял, что в string не записывается текст построчно, только одна строка пишется. Как записывать полностью текст, именно в string ?
Nosey
 Аватар для Nosey
1184 / 351 / 102
Регистрация: 22.10.2014
Сообщений: 786
Завершенные тесты: 2
19.02.2016, 23:20     Из переменной типа std::string записать в файл большое количество данных (2 Mb) #13
Цитата Сообщение от Nik- Посмотреть сообщение
Я понял, что в string не записывается текст построчно, только одна строка пишется. Как записывать полностью текст, именно в string ?
Почти также как и записываете
C++
1
2
3
4
    std::ifstream inFile("file");
    std::istreambuf_iterator<char> inFileBegin(inFile);
    std::istreambuf_iterator<char> inFileEnd;
    std::string outString(inFileBegin, inFileEnd);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2016, 23:31     Из переменной типа std::string записать в файл большое количество данных (2 Mb)
Еще ссылки по теме:

Как скопировать строку типа std::string в другую строку такого же типа? C++
Нюансы работы со строками типа std::string (ищу литературу, статьи, сайты) C++
C++ Считать текст из файла в строку типа std::string (файловый ввод/вывод)

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

Или воспользуйтесь поиском по форуму:
Nik-
19 / 19 / 9
Регистрация: 12.07.2015
Сообщений: 322
19.02.2016, 23:31  [ТС]     Из переменной типа std::string записать в файл большое количество данных (2 Mb) #14
А как обратно в файл записать ?

Добавлено через 3 минуты
А все, спасибо большое
Yandex
Объявления
19.02.2016, 23:31     Из переменной типа std::string записать в файл большое количество данных (2 Mb)
Ответ Создать тему
Опции темы

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