簡単そうな質問で申し訳ありませんが、バイナリエディタのようにバイナリ形式のファイルを開いて編集して保存したいのですがどなたか教えていただけませんでしょうか?
検索してみたのですがよくわからなかったもので。
よろしくお願いします。
バイナリエディタを作りたい、ということでしょうか。
どういう形式のバイナリエディタを作りたいのでしょうか。
、PC8801の、monステートメントにあるバイナリエディタのように、
ADDR:OLD:NEW
0000: 00: 2D
0001: 00: ■ <- ■はカーソル
と1バイトずつ入れるタイプであれば、結構簡単に作れます。
ファイルの読み込み、保存は、TFileStreamを使用します。
バッファを確保しておき、そこにreadすれば読み込めますし、writeすればファイルに書き込まれます。
表形式で、
0000:00 00 00 00 00 00 00 00
0008:00 00 00 00 00 00 00 00
・・・
というエディタを作るには、外観にもよりますが少し面倒です。
海外のコンポーネントですが、
http://www.torry.net/
に、バイナリエディタ用コンポーネントがあったと思います。
日本の方でも誰か作っていたような・・・。
あるとしたら、
http://home1.infonia.ne.jp/~delphian/delphi/
でしょうか。
# 未確認です。
内部のほうはTMemoryStreamを使うのがいいと思います。
使いかたは…。そうですねぇ、結構ヘルプを見ても分かりにくいんですけど、
TMemoryStreamとかいれれば、結構検索できるんじゃないでしょうか?
あと、バイナリエディタのようにというので、表示したり編集したりですけど、
これは、まあ、自分で各バイトを表示して、管理するようにするしかなさそうですねぇ。
グリッドコンポーネントとかは、うまく使えば使えそうな気もしますけど…。
あ、のんびり書いてるあいだにさきに書いた人が…^^;
TFileStreamでもいいですけど、ファイルそのものに書きこんじゃうし、
取り消しが効かなくなるんじゃ…?
それに、MIDI書き換えプログラムをVBで作ったことがあって、
それをTFileStreamでやったんですけど、すごく遅かったです。
(VB時では、MIDIファイル再生寸前にこっそりやってもばれないレベル。
TFileStreamを使うと、多分ばれるレベルになりました^^;)
原因はメモリに格納しないからだとか…。
いや、ファイルの読み書きにTFileStreamを使った方が楽、というだけで、内部ではTMemoryStreamで管理した方が楽ですね。
そうすれば、read/writeでなく、Assignで読み書きできますし。
あ、TMemoryStreamを使えば、LoadFromFile/SaveToFileできますね。
詳しくみていませんが、たぶんTMemoryStreamには2GBだか4GBだかの限界値があるように思います。
巨大なファイルを扱うときは、TFileStreamでSeekして読み込まないといけないかもしれません。
Seekのときは、APIに直接ハンドルを渡せば、2GBの境界はないはずです。
遅くなってすみません。
TFileStreamまたはTMemoryStreamを使えばいいということですね。
ためしてみます。ありがとうございました。
ストリームの中身って、アサインができましたっけ?できますよねぇ、気づきませんでした^^;
というわけで、両方使うのも手かも。実際はやってみないと分からないですね。
2GBの制約ですかぁ^^;わたしの感覚では、ハードディスク一個分なんて感覚ですけど、
(うち、ふたつのドライブあわせて5GB足らずなので^^;)
実際そんな夢のような話でもないんですよね^^;
やっぱりふたつともをうまく扱うべきなのかも。
(ひええ、2GBなんていったら、いちばん順調なADSL回線でも、
ダウンロードに2分近くかかるサイズ…(^^;;;)
ツイート | ![]() |