タイトル | : Re^4: VB6.0でデータをバイナリ処理 |
記事No | : 14489 |
投稿日 | : 2010/02/23(Tue) 10:34 |
投稿者 | : 魔界の仮面弁士 |
> ごくまれにファイルの配列の要素が結合したりとかファイルが大きくなったりします。 Put # ステートメントは、データ量が多くなれば、元のファイルも大きくなります。 その逆に、ファイルサイズが小さくなる事は無い点にも注意してください。
それは考慮済みという事であれば、Remote Desktop による複数人同時ログオンや アプリの同時起動などにより、同一ファイルへの同時アクセスが発生していないかを 確認してみてください。
後は、ファイルの内容はモジュールレベル変数(この場合はグローバル変数)で 保持しているようですが、その変数を別の場所で編集している箇所が無いかも チェックしてみてください。変数 RW を直接編集していなかったとしても、それを どこかの Sub/Function 引数に渡していて、その引数に ByVal をつけ忘れたまま 引数を編集してしまい、その結果が RW にも意図せず反映されてしまっているとか。
> Open Datafile For Binary Access Read As #1 > Open Datafile For Binary Access Write Lock Write As #2 書きこみ時には「Lock Write」していますが、その反面、 読み込み時には未指定ですが、それは意図的な物ですか?
> データ処理に以下のような文字列をバイナリ形式で読み書き処理をしてましたが > Get #1, 1, RW() > Put #2, 1, RW() この方法は、テキストファイルへの読み書きには使えませんが、その点は大丈夫ですか? また、各要素の文字列長が短くなった場合、末尾にごみデータが残る可能性がありますが、 その点もクリアされているのでしょうか?
たとえば、 Erase RW RW(0) = "あいうえお!" RW(1) = "かきくけこ" RW(367) = "Sample Data" RWdata "Write" とした場合、結果ファイルにはデータ長を示す 2 バイトの記述子が書きこまれるため、 1バイト目: 0B,00 : 「11バイト」を表す 3バイト目: 82,A0,82,A2,82,A4,82,A6,82,A8,21 : 「あいうえお!」を表す 14バイト目: 0A,00 : 「10バイト」を表す 16バイト目: 82,A9,82,AB,82,AD,82,AF,82,B1 : 「かきくけこ」を表す 26バイト目: 00,00 : 「0バイト」を表す 28バイト目: 00,00 : 「0バイト」を表す 30バイト目: 00,00 : 「0バイト」を表す(以降繰り返し) : 756バイト目: 0B,00 : 「11バイト」を表す 758バイト目: 53,61,6D,70,6C,65,20,44,61,74,61 : 「Sample Data」を表す というバイナリファイルが生成されます。 (00 等はテキストデータとして扱えないため、バイナリファイルとなります)
そしてさらにこの後、 Erase RW RW(0) = "TEST" RW(367) = "DATA" RWdata "Write" というデータが書き込まれると 1バイト目: 04,00 : 「4バイト」を表す 3バイト目: 54,45,53,54 : 「TEST」を表す 7バイト目: 00,00 : 「0バイト」を表す 9バイト目: 00,00 : 「0バイト」を表す 11バイト目: 00,00 : 「0バイト」を表す(以降繰り返し) : 739バイト目: 04,00 : 「4バイト」を表す 741バイト目: 44,41,54,41 : 「DATA」を表す 745バイト目: ※これ以降には、前回書き込み時のファイル内容がそのまま残っている※ という結果になります。
|