既存のバイナリデータにデータを追加する方法を教えてください。

[戻る]
ゴン太 2004/10/24(日) 14:30:31
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は既存のデータの最初のアドレスを参照していますが、
既存のデータの後に付け加える、追加のデータのアドレスを参照する方法
はどうすればよいでしょうか。

ご存知の方おられましたら、アドバイス頂けると有難いです。
よろしくお願いいたします。

KING・王 2004/10/24(日) 15:34:22
まず、CFileクラスのメンバを調べて下さい。

Seekなり、SeekToEndなり、GetLengthなり、色々ありますので、
それぞれの仕様を読んで、あながたやりたいことに適した関数を使用して下さい。

wood 2004/10/24(日) 18:48:07
提示されたソースの外側に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」についても勉強してみると
良いかもしれませんね

ゴン太 2004/10/24(日) 22:04:18
[[解決]]
KING・王さん、woodさん、アドバイス有難うございます。
勉強不足なので、もっと知識を習得していきたいと思います。
一応、データの追加もできました。

本当に有難うございました。

古いスレッドには追加発言できません。