2012-06-02 2 views
-5

Мой вопрос: как я могу сохранить содержимое .txt-файла в char* с именем m_str, на C++?как сохранить файл в char *

Обратите внимание, что мой файл имеет очень определенный формат, который я хочу сохранить. Я не хочу объединять линии вместе. Я хочу, чтобы одна строка 1 оставалась в строке 1, а какая-то строка 2, чтобы оставаться в строке 2. Поскольку в конце концов я собираюсь сериализовать это char* и отправить его по сети, а когда узел получит его, он будет десериализуйте его, а затем поместите содержимое в файл и прочитайте строки так, как они были в исходном файле.

Thank you.

+0

http://stackoverflow.com/questions/2975931/read-from-file-as-char-array –

+0

Возможный дубликат [Читать весь ASCII-файл в C++ std :: string] (http://stackoverflow.com/questions/2602013/read-whole-ascii-file-in-c-stdstring) –

ответ

7

Вы можете использовать вектор, как:

std::ifstream file("file.txt"); 
std::istreambuf_iterator<char> begin(file), end; 
std::vector<char> v(begin, end); //it reads the entire file into v 

char *contentOfTheFile= &v[0]; 

Содержание файла хранится в contentOfTheFile. Вы можете использовать его, и изменить это также.

+0

спасибо nawaz за ответ, это фрагмент кода, который вы разместили так же, как сохранение файла в char *? и прочитает ли он файл без объединения строк? – PeacefulSoul

+1

@PeacefulSoul: Почему бы вам не поэкспериментировать с ним и не узнать ответы на свои вопросы самостоятельно? Эксперимент является частью обучения. – Nawaz

+0

Я только что сделал, и это сработало, спасибо! – PeacefulSoul

0
#include <vector> 
#include <fstream> 
#include <stdexcept> 

void foo() { 
    std::ifstream stream("file.txt"); 
    if (!stream) throw std::runtime_error("could not open file.txt."); 
    std::vector<char> str(std::istreambuf_iterator<char>(stream), 
         (std::istreambuf_iterator<char>())); 
    char* m_str = str.data(); 
} 

Должен делать то, что вам нужно.

+0

Это не сработает. 'str' не является объектом; это объявление функции. Причина; C++ vexing parse! – Nawaz

+1

'std :: vector str (std :: istreambuf_iterator (поток), std :: istreambuf_iterator (поток));' это объявление функции :) [К счастью] (http://ideone.com/arRRm), компилятор может поймать ошибку, потому что вы используете имя параметра 'stream' дважды. – fredoverflow

+0

Арр дерьмо. Починил это. :) –

Смежные вопросы