хорошо, у меня есть эта программа, работающая с использованием c-строк. Мне интересно, можно ли читать в блоках неформатированный текст в std :: string? Я играл с if >>
, но это читается построчно. Я ломал свой код и бился головой о стену, пытаясь использовать std :: string, поэтому я подумал, что пришло время привлечь экспертов. Вот рабочая программа, вам нужно предоставить файл "a.txt" с некоторым содержимым, чтобы он работал.
Я пытался дурачиться с:
in.read (const_cast<char *>(memblock.c_str()), read_size);
но это было странно. Я должен был сделать std::cout << memblock.c_str()
, чтобы заставить его напечатать. и memblock.clear()
не очистил строку.
в любом случае, если вы можете придумать способ использования STL, я был бы очень признателен.
Вот моя программа с использованием c-строк
// What this program does now: copies a file to a new location byte by byte
// What this program is going to do: get small blocks of a file and encrypt them
#include <fstream>
#include <iostream>
#include <string>
int main (int argc, char * argv[])
{
int read_size = 16;
int infile_size;
std::ifstream in;
std::ofstream out;
char * memblock;
int completed = 0;
memblock = new char [read_size];
in.open ("a.txt", std::ios::in | std::ios::binary | std::ios::ate);
if (in.is_open())
infile_size = in.tellg();
out.open("b.txt", std::ios::out | std::ios::trunc | std::ios::binary);
in.seekg (0, std::ios::beg);// get to beginning of file
while(!in.eof())
{
completed = completed + read_size;
if(completed < infile_size)
{
in.read (memblock, read_size);
out.write (memblock, read_size);
} // end if
else // last run
{
delete[] memblock;
memblock = new char [infile_size % read_size];
in.read (memblock, infile_size % read_size + 1);
out.write (memblock, infile_size % read_size );
} // end else
} // end while
} // main
если вы увидите что-нибудь, что улучшит этот код, пожалуйста, дайте мне знать.