[リストへもどる]
一括表示

投稿時間:2004/05/30(Sun) 22:12
投稿者名:にゃん
URL :
タイトル:
Binaryで開いたファイルについて
はじめまして、早速なんですが質問をば・・・。

ファイルをBinary形式で開いたときにある位置に何かデータを”挿入”することはできないでしょうか?
Putステートメントを使うと上書きされてしまい、前に書き込まれていたデータが消えてしまうので、
どうにか挿入をしたいと思っているのですが・・・・。
処理速度を考えて、以前のデータをコピーして書き込み後にコピーをくっつけるという方法
は使いたくないので。。。

どなたか知恵をお貸しいただけないでしょうか?よろしくお願いします。

投稿時間:2004/05/31(Mon) 09:38
投稿者名:dai
Eメール:dee_bassist@hotmail.com
URL :http://homepage2.nifty.com/Dee/
タイトル:
Re: Binaryで開いたファイルについて

> ファイルをBinary形式で開いたときにある位置に何かデータを”挿入”することはできないでしょうか?
> Putステートメントを使うと上書きされてしまい、前に書き込まれていたデータが消えてしまうので、
> どうにか挿入をしたいと思っているのですが・・・・。

こういうことでしょうか?
http://homepage2.nifty.com/Dee/vb/tips/vb/insertinthemiddle.html

投稿時間:2004/05/31(Mon) 19:09
投稿者名:にゃん
URL :
タイトル:
Re^2: Binaryで開いたファイルについて
返信とリンクありがとうございます。ちょっと見てきたのですが、やっぱりちょっと違うんですよね。。。
このサンプルの場合、もとのデータをコピーして、位置をずらして書き込み、その後新しいデータを
書き込むという形でした。しかしこれだとデータをコピーするのに処理時間がかかってしまって・・・・。
いろいろ探してみたんですが、やはり挿入するという関数は無いようでした。
何とかほかの方法で処理速度向上を図ってみたいと思います。

投稿時間:2004/05/31(Mon) 22:37
投稿者名:Say
Eメール:
URL :
タイトル:
Re^3: Binaryで開いたファイルについて
シーケンシャルデータの場合、本質的にデータの挿入はできません。
バイナリで、同一ファイルに対し挿入処理を行う場合、次のようになるかと。

1.ファイルを開き、挿入位置までシーク
2.挿入位置以降のデータをメモリなどに保持
3.挿入位置に挿入データを書き込み。
4.挿入データの後ろに保持したデータを書き込み。
5.ファイルクローズ。

このやりかただと、処理中に異常があるとファイルが失われる危険がありますから、
安全を考えると、事前にコピーしてから実施したほうがよろしいかと。

また、挿入位置が複数ある場合、いちいち挿入位置ごとに上記処理を行うより、
1.メモリに一括読み込み
2.メモリ上で挿入処理
3.メモリから一括書き込み
を行ったほうが高速に行える可能性があります。
どちらがどの程度高速化は挿入位置・回数・サイズや
CPU、メモリ、HDDの速度などにより一概に言えませんので、
処理速度が重要なら、実際に測定してみるのがいいでしょう。

投稿時間:2004/05/31(Mon) 23:53
投稿者名:にゃん
URL :
タイトル:
Re^4: Binaryで開いたファイルについて
丁寧な解説ありがとうございます。
この方法でも試してみます。
低、高スペックPCの違いがかなり出てきてしまうのでいろいろ苦労していました。
なるべく多くの方法を試して、より良い処理を探してみます、本当にありがとうございました。