DOBON.NET DOBON.NETプログラミング掲示板過去ログ

VB6で使用するファイルサイズの上限について

環境/言語:[WindowsServer2003, VB6.0]
分類:[VB6以前]

2006/06/26(Mon) 12:58:27 編集(投稿者)

いつも参考にさせていただいております。

現在、VBで大容量ファイルを扱うバッチプログラムを開発中なのですが、
「ファイル名または番号が不正です」とエラーが発生し、
出力ファイルのファイルサイズを見ると4GBとなっておりました。

エラー直前のPutコマンドは動作しているようですので、
ファイル名やファイル番号は問題ないと考えております。

VB6で扱うファイルサイズの上限は4GBなのでしょうか?
それともOSの制限なのでしょうか?
■No16374に返信(saisaiさんの記事)
> VB6で扱うファイルサイズの上限は4GBなのでしょうか?
> それともOSの制限なのでしょうか?

書き込んでいるボリュームの「ファイル システム」は、何でしょうか?
4GB ということは、FAT32 を使用されているのではないでしょうか?
> VB6で扱うファイルサイズの上限は4GBなのでしょうか?
> それともOSの制限なのでしょうか?

NTFSの制限です。(だったよな?)
FATやFAT32だともっと小さくなります。(超古いマシンだとBIOSの制限も出てきます)

そもそも論はおいといて、現状では分割するしかなさそうですね。
*.dat.001,*.dat.002・・・
> 4GB ということは、FAT32 を使用されているのではないでしょうか?

ありゃ?
そうでしたっけ。。。
■No16376に返信(まどかさんの記事)
> NTFSの制限です。(だったよな?)
> FATやFAT32だともっと小さくなります。(超古いマシンだとBIOSの制限も出てきます)

この考えは逆ですよね。
http://www.microsoft.com/windows2000/ja/Server/help/choosing_between_NTFS_FAT_and_FAT32.htm

FAT   : ファイル サイズの上限は 2 GB です。
FAT32 : ファイル サイズの上限は 4 GB です。
NTFS  : ファイルのサイズに対する制限は、ボリュームのサイズだけです。
みなさん御回答ありがとうございます。

ファイルシステムはNTFSです。

こちらでファイル出力のみのプログラムを作って試してみたところ、
Printを繰り返す場合はOKで、4GB以上のテキストファイルが作成できました。
Putを繰り返す場合はNGで、中断後の出力ファイルのサイズはちょうど4GBでした。

Putでは4GB以上は無理なのでしょうか?
>>NTFSの制限です。(だったよな?)

すいません。
早とちりでした。。。(; ;)
> Printを繰り返す場合はOKで、4GB以上のテキストファイルが作成できました。
> Putを繰り返す場合はNGで、中断後の出力ファイルのサイズはちょうど4GBでした。

Printは単に末尾に追加しているだけなのでその位置が関係ありません。
Putは位置が関係しますが、Seek関数の戻り値がLongであることから約2GBくらいが限界ではないでしょうか。
PutからPrintに修正することにします。

じゃんぬねっとさん、まどかさん
ありがとうございました。
解決済み!
■No16383に返信(saisaiさんの記事)
> PutからPrintに修正することにします。
バイナリで開いていればバイナリな値をPutで出力ということですよね?
その場合はPrintではかなり問題があると思うので、
っ[ ADODB.Stream ]
をひっそりと書き残しておくことにします
(扱えるファイルサイズの限界は2GB以上になると予感します)
> っ[ ADODB.Stream ]
> をひっそりと書き残しておくことにします

Print# などは、ファイルに随時書きこみを行っていきますが、
Stream は、データをメモリに溜め込んでいく仕様なので、
巨大なファイルを扱うのには、向かないかも知れません。

(とはいえ、ギガバイト級というのは、さすがに未確認ですが)


もしもバイナリ出力も必要だとすれば、残る道は、
CreateFile, WriteFile などの API 制御かな……。
http://support.microsoft.com/kb/189981/en-us

DOBON.NET | プログラミング道 | プログラミング掲示板