はじめまして。
今回、初めてWindowsソフトのプログラミングに挑戦する者です。
ファイルダイアログからファイルをバイナリデータをして
char型の配列に読み込み、
一部分を書き換えて別名ファイルとして保存しなおす
といったプログラムを考えています。
自分で調べた限りでは CArchive というのが便利そうだとわかり、
一応自分でコードを書いてみましたが使い方がわかりません。
(とリあえず一部分を書き換える処理は省略しました)
void CPtn2ptxDlg::OnButton1() // File Open
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
//-------------------------------------------■ここから追加
CFileDialog myDLG( TRUE,"bin","*.bin", OFN_FILEMUSTEXIST | OFN_HIDEREADONLY,"ptnファイル(*.bin)|*.bin||");
if(myDLG.DoModal() == IDOK){
CStdioFile fin(myDLG.GetPathName(),CFile::modeRead | CFile::typeBinary);
CArchive ar_fin(&fin, CArchive::load);
char ss[65535];
ar_fin >> ss;
CStdioFile fout("hogehoge.bin",CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
CArchive ar_fout(&fout, CArchive::store);
ar_fout << ss;
}
//-------------------------------------------■ここまで追加
}
ご指導よろしくお願いします。
CArchive でググったら、あっさりサンプルが見つかりましたが。
http://www.google.com/search?hl=ja&inlang=ja&ie=Shift_JIS&oe=Shift_JIS&q=CArchive&lr=lang_ja
というか、MSDNを見てみたら、char配列は使えないようですね。
使用できるデータ型やクラス型はMSDNに書いてあります。
この場合は、CStringクラスを用いるのが望ましいと思われます。
# 読み出しバイト数を指定できないのに、固定長のバッファに
# 読み込もうとするのは危険です。
## てか、スタックに64KBも・・・
# MSDN見ながら書いていたので、まとまりがなくてすみません。
バッファとサイズを指定して読み書きする、
CArchive::Read
CArchive::Write
が使えそうですね。
ref: MSDN
char配列しか使わないなら、CFile::Read()で十分でしょう。
RAPT さん、dairygoods さん
ありがとうございました。
GetLength()を併用してサイズ指定することで読み書きできました。
>CArchive でググったら、あっさりサンプルが見つかりましたが。
>
>http://www.google.com/search?hl=ja&inlang=ja&ie=Shift_JIS&oe=Shift_JIS&q=CArchive&lr=lang_ja
は質問前に確認していたんですが、私はC言語(組み込み向け)は経験ありなのですが、C++やファイル操作は今回同時平行で勉強中でしてよく理解できなかったので…
もう少し基礎知識を優先的に学んだほうが良さそうですね。
ありがとうございました。
ツイート | ![]() |