reading a file into a string

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • David Bellot

    reading a file into a string

    Hi everybody,

    I'd like to read part of a file directly into the internal buffer of a
    string so that not to use the copy constructor to fill in my string.

    What I did before was :

    char buffer[1024];
    ifstream f("my_file");

    f.seekg(my_posi tion);
    f.read(buffer, my_size);

    string s(buffer);

    and the last line cost is that it uses a copy constructor to transfer
    data from the buffer into the string's buffer. The file I wanna read is
    really large (129Gb) and I don't wanna have to copy 129Gb for nothing.

    The string is then used with a library (actually, it's the
    Boost::tokenize r which requires a string).

    Do you guys have a solution ?

    Thanks,
    David
  • Thomas J. Gritzan

    #2
    Re: reading a file into a string

    David Bellot schrieb:
    I'd like to read part of a file directly into the internal buffer of a
    string so that not to use the copy constructor to fill in my string.
    >
    What I did before was :
    >
    char buffer[1024];
    ifstream f("my_file");
    >
    f.seekg(my_posi tion);
    f.read(buffer, my_size);
    >
    string s(buffer);
    >
    and the last line cost is that it uses a copy constructor to transfer
    data from the buffer into the string's buffer. The file I wanna read is
    really large (129Gb) and I don't wanna have to copy 129Gb for nothing.
    >
    The string is then used with a library (actually, it's the
    Boost::tokenize r which requires a string).
    I'm checked the documentation and I am quite sure that you don't need a
    std::string for tokenizer. You can use a begin/end iterator (or pointer) pair.

    I hope you don't try to hold the complete file in memory :-)

    --
    Thomas

    Comment

    • Jim Langston

      #3
      Re: reading a file into a string

      "David Bellot" <david.bellot@f ree.frwrote in message
      news:451c50a8$0 $28025$626a54ce @news.free.fr.. .
      Hi everybody,
      >
      I'd like to read part of a file directly into the internal buffer of a
      string so that not to use the copy constructor to fill in my string.
      >
      What I did before was :
      >
      char buffer[1024];
      ifstream f("my_file");
      >
      f.seekg(my_posi tion);
      f.read(buffer, my_size);
      >
      string s(buffer);
      >
      and the last line cost is that it uses a copy constructor to transfer data
      from the buffer into the string's buffer. The file I wanna read is really
      large (129Gb) and I don't wanna have to copy 129Gb for nothing.
      >
      The string is then used with a library (actually, it's the
      Boost::tokenize r which requires a string).
      >
      Do you guys have a solution ?
      One option would be to use a std::vector<cha rinstead of a std::string.
      Preallocate the 1024 bytes and write directly into the vectors memory (which
      is allowed) using (I believe) .data().

      Of course this won't get you std::strings benifits (substr, etc...)


      Comment

      Working...