わかりました、このプログラムは c-strings を使用して動作しています。フォーマットされていないテキストのブロックを 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-stringsを使用した私のプログラムです
// 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
このコードをより良くする何かを見つけたら、遠慮なく私に知らせてください。