tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルバイナリデータの取り出し
記事No14923
投稿日: 2010/09/10(Fri) 23:51
投稿者ニール
VB6初心者です。
環境はVB6 Windows7です。よろしくお願いいたします

バイナリデータを取り出し、
ファイルとして保存するということをやりたいです。
ファイルは2GBなどのファイルを扱うことがあります
まず取り出しの処理の前に
以下のコードでファイルを開いて保存するような動作から作ってみたのですが
2GBのファイルのせいかReDimの行で「メモリが不足しています。」というエラーになりました
どなたか解決方法を教えていただけませんでしょうか?
お願いします

Dim bytArray() As Byte
Open "test.bin" For Binary As #1
ReDim bytArray(FileLen("test.bin") - 1)
Get #1, , bytArray
Open "Res.txt" For Binary Access Write As #2
Put #2, , bytArray
Close #2
Close #1

[ツリー表示へ]
タイトルRe: バイナリデータの取り出し
記事No14924
投稿日: 2010/09/11(Sat) 00:52
投稿者花ちゃん
> 2GBのファイルのせいかReDimの行で「メモリが不足しています。」というエラーになりました

> ReDim bytArray(FileLen("test.bin") - 1)

FileLen 関数をヘルプで調べれば解るのですが、戻り値は、Long 型ですので、
2GB 迄しか扱えません。(これ以外でも問題が発生するかも知れません)

そのような大きなファイルを扱った事がないので、詳しくは知りませんが、分割するなり、
Win32 API 関数等を使ってファイル操作するしかないのでは。
http://support.microsoft.com/kb/165942/ja

詳しくは、目的にあった方法を検索して調べて見て下さい。
(Windows 7 上でVB6.0で、新たに開発するのはお勧めできませんし、VB6.0 を使用
するより、VB2010 等を使用するなども含めて)
http://hanatyan.sakura.ne.jp/vb60bbs/wforum.cgi?mode=allread&no=14868&page=0

[ツリー表示へ]
タイトルRe: バイナリデータの取り出し
記事No14925
投稿日: 2010/09/11(Sat) 13:23
投稿者魔界の仮面弁士
> どなたか解決方法を教えていただけませんでしょうか?
コードだけ見ると、ただのファイルコピーで良さそうにも見えますね。
実際にはこれに、どのような処理を加える予定なのでしょうか?

> ReDimの行で「メモリが不足しています。」というエラーになりました
オンメモリで 2GB を一気に確保するのは無理があると思いますよ。

Open 自体はできているなら、少量(たとえば 20MB ずつ)に区切って
繰り返し処理することで対応できるかと思います。

[ツリー表示へ]