掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ファイルをバイナリで読み込むには?? (ID:116431)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> BASE64は学校で習ったつもりだったんですが・・。 私の学科ではそうした授業が無かったので、ちょっと羨ましいです。(^^; > 2の6乗の64通りで文字を表すとかじゃなかったでしたっけ? 「文字を表す」ではなく、「文字で表す」でしょう。 > バイト配列Bufferが0番地から始まるからですよね? ですます。そういう事です。 > もし閉じないと、データがおかしくなったりしてしまうのでしょうか? たとえば、ロックの問題などがあります。 ファイルを開いている間は、他のユーザーが内容を変更できないようにする事ができます。 (他のアプリがそのファイルに対してデータを書きこめないよう、ファイルがロックされます) この時、もしも Close するのを忘れていると、そのファイルはいつまでもロックされたままに なってしまいますので、他のアプリケーションが、いつまでたってもそのファイルを 使えないなってしまうという事態が発生します。 一応の保護措置として、(処理が終了したり、アプリが閉じられたりなどして) 使用していた変数が Nothing 状態になれば、.NETの『ガベージコレクト』が 行われたタイミングで、自動的に Close 処理が行われるようにはなっています。 しかし、だからといって、ガベージコレクトされるまで放置するわけにもいきませんよね。 (その間、他のアプリがそのファイルを使えないのですから) そして、解放処理が必要なのは、FileStreamクラスだけではありません。 ファイルに限らず、Windowsの資源(リソース)の多くは、解放処理を必要とします。 具体的には、 Form や Image や Font などが、解放が必要なクラスとなっています。 これらのクラスは、使用後に Dispose メソッドでオブジェクトを破棄してやらないと、 利用していたメモリの一部がシステムに返還されない可能性があるのです。 (ちなみに、Disposeが必要なクラスには、IDisposableインターフェイスが実装されています) > 16KBで分けるのには何か特別な意味はありますか? バイト数は適当なので、32KBでも20KBでも構いません。 ただ、Win9X系 OS では、TextBox に 64KB までの制限がありますので、 それより小さい値として、16KBという値を選んだだけの事です。 > 例えば、100KBのデータがあったとして、始めに50KB分よんで、次に読み込むときは、DataFile.Read(Buffer,49,100)ということですよね? ……違いますよ。それでは、49バイト目〜148バイト目に読み込む事になってしまいます。 100KBという事は、102,400バイトという事なので、書き換えるなら、 最初の100KB分: DataFile.Read(Buffer, 0, 102400) 次の100KB分: DataFile.Read(Buffer, 0, 102400) といった感じになります。2回目の呼び出しが、 DataFile.Read(Buffer, 102400, 102400) だと、意味が異なってくるので、注意してください。 Readメソッドで指定する位置と長さは、ファイル内の位置を示しているのではなく、 受け取る配列側の位置を示している点に注意してください。 例えば、元データが 16バイトあったとして、 0バイト目: &H00 1バイト目: &H01 2バイト目: &H02 : : 14バイト目: &H0E 15バイト目: &H0F のようになっていたとします。 この時、 Dim Buffer(8) As Byte DataFile.Read(Buffer, 0, 3) のようなコードを実行すれば、配列の内容は、 Buffer(0) = &H00 Buffer(1) = &H01 Buffer(2) = &H02 Buffer(3) = 変化無し Buffer(4) = 変化無し Buffer(5) = 変化無し Buffer(6) = 変化無し Buffer(7) = 変化無し Buffer(8) = 変化無し のようになります。 そしてその後で、さらに、 DataFile.Read(Buffer, 5, 3) と呼び出すと、配列の中身は、 Buffer(0) = &H00(変化無し) Buffer(1) = &H01(変化無し) Buffer(2) = &H02(変化無し) Buffer(3) = 変化無し Buffer(4) = 変化無し Buffer(5) = &H03 Buffer(6) = &H04 Buffer(7) = &H05 Buffer(8) = 変化無し のようになります。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.