基本的なことですいません。
ただいまC++の勉強中で、listクラスの練習をしています。
iterator.begin()が最初の要素のポインタを返してくれないようで、
以下のコードを実行しても、最後にReadFile()で
読んだデータを繰り返し出力しているようです。
iteratorの使い方が間違っているのでしょうか?
-----
#include stdafx.h
#include windows.h
#include <list>
const unsigned long BUFFER_SIZE = 65536;
using namespace std;
typedef list<unsigned char*> LISTCHARP;
int main(int argc, char* argv[])
{
char* filename;
HANDLE hinf;
HANDLE houtf;
unsigned char readdata[BUFFER_SIZE];
unsigned long filesize;
unsigned long buffersize;
unsigned long readsize;
unsigned long writtensize;
filename = E:\\Data\\test.txt;
hinf = CreateFile(filename, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, NULL);
filename = E:\\Data\\copy.txt;
houtf = CreateFile(filename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_ARCHIVE, NULL);
filesize = GetFileSize(hinf, NULL);
printf(file size : %d\n, filesize);
LISTCHARP listcp;
LISTCHARP::iterator i;
int count = 1;
while (true)
{
if (filesize <= (count * BUFFER_SIZE))
buffersize = filesize - ((count - 1) * BUFFER_SIZE);
else
buffersize = BUFFER_SIZE;
ReadFile(hinf, readdata, buffersize, &readsize, NULL);
printf(read size : %d\n, readsize);
listcp.insert(listcp.end(), readdata);
if (filesize < (count * BUFFER_SIZE))
break;
count++;
}
count = 1;
for (i = listcp.begin(); i != listcp.end(); ++i, ++count)
{
if (filesize <= (count * BUFFER_SIZE))
buffersize = filesize - ((count - 1) * BUFFER_SIZE);
else
buffersize = BUFFER_SIZE;
WriteFile(houtf, *i, buffersize, &writtensize, 0);
printf(written size : %d\n, writtensize);
}
return 0;
}
すいません。自分で気付きました。
ポインタをlist.insert()したのに、
そのポインタの指すデータを変更してました。
こんにちは。
せっかく勉強中ということですので、ヒントを。
コードを読んでみましたが、STLの構文などは間違って
いないと思います。問題になっているのはファイルから
読み込んだデータをLISTに追加する部分です。
ファイル読み込みのループを見ると、同じアドレスを
指すポインタをループ回数分、LISTに追加しています。
これで、何が問題かはわかりますよね?
あら、解決したんですね、おめでとうございます。