既存のバイナリデータにデータを追加する方法を教えてください。 – プログラミング – Home

既存のバイナリデータにデータを追加する...
 
通知
すべてクリア

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


ゴン太
 ゴン太
(@ゴン太)
ゲスト
結合: 24年前
投稿: 18
Topic starter  

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・王
 KING・王
(@KING・王)
ゲスト
結合: 21年前
投稿: 122
 

まず、CFileクラスのメンバを調べて下さい。

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


返信引用
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
 

提示されたソースの外側に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」についても勉強してみると
良いかもしれませんね


返信引用
ゴン太
 ゴン太
(@ゴン太)
ゲスト
結合: 24年前
投稿: 18
Topic starter  

KING・王さん、woodさん、アドバイス有難うございます。
勉強不足なので、もっと知識を習得していきたいと思います。
一応、データの追加もできました。

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました