VC初心者の者です。
CFileクラスで
ファイルをオープンし、既存のデータも書き換えるのですが、
その際に追加のデータも付け加えたいのです。
ソースの一部を載せてみました。
/* アロケート */
void *ptr;
/* ファイルサイズを格納する領域の割り当て */
ptr = malloc( status.m_size );
if( ptr == NULL )
if( IDCANCEL == AfxMessageBox( 使用可能なメモリ領域が十分で
はありません, MB_OKCANCEL | MB_ICONQUESTION ))
return;
else
if( IDCANCEL == AfxMessageBox( パス名用のメモリ領域が割り当
てられました, MB_OKCANCEL | MB_ICONQUESTION ))
return;
/* 読み込み */
m_File.Read(ptr,status.m_size);
ptrは既存のデータの最初のアドレスを参照していますが、
既存のデータの後に付け加える、追加のデータのアドレスを参照する方法
はどうすればよいでしょうか。
ご存知の方おられましたら、アドバイス頂けると有難いです。
よろしくお願いいたします。
まず、CFileクラスのメンバを調べて下さい。
Seekなり、SeekToEndなり、GetLengthなり、色々ありますので、
それぞれの仕様を読んで、あながたやりたいことに適した関数を使用して下さい。
提示されたソースの外側にFOR文等が無いことを期待して説明しますが
>ptr = malloc( status.m_size );
>m_File.Read(ptr,status.m_size);
この示された2行の「status.m_size」がたとえば「100」だったとした場合
100バイトメモリを確保し100バイトデータを読み込む だけで終わってしまう
と思います
質問の101バイト目からの参照またはそこへデータを退避する行為は
してはいけません
自分以外のアプリケーションが使用している可能性や、不定な値が入っているからです
つまり教科書などに書かれている「実態のないアドレス参照」等に類するからです
通常読み込みたいレコード数が10あった場合
ptr = malloc( status.m_size * 10 );
for(i=0;i<10;i++) {
m_File.Read(*(ptr+status.m_size「1回前に読み込んだ奴」),status.m_size);
}
のような記述になると思います
>ファイルをオープンし、既存のデータも書き換えるのですが、
>その際に追加のデータも付け加えたいのです。
に対する回答にはなっていませんが、もう少しポインタの勉強をしてみては
いかがでしょうか
C++で作成しているようなので「CArray」についても勉強してみると
良いかもしれませんね
KING・王さん、woodさん、アドバイス有難うございます。
勉強不足なので、もっと知識を習得していきたいと思います。
一応、データの追加もできました。
本当に有難うございました。