投稿時間:2004/05/25(Tue) 02:53 投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:Re: VBでファイルサイズ取得
# 手元のエクスプローラで試して見たら、PB(ペタバイト)単位のファイルも、 # きちんとサイズを表示できていました…。エクサも表示できるかな? (^^;)
> VBで1ファイル5GB以上のファイルのファイルサイズを > 取得したいのですが可能でしょうか?
VB標準の命令(FileLen等)では取得できませんが、外部コンポーネントや APIなどを使う事で取得可能です。ただ、環境によって使える方法に差があります。
例えば、巨大なファイルのサイズを取得するための GetFileSizeEx という APIがありますが、これは Windows 2000 以降でしか利用できません。 また、FileSystemObjectの「FileオブジェクトのSizeプロパティ」も、 ファイルサイズを取得する事ができますが、これも環境によっては動作しません。
目的の環境で動作するかどうかは、実際に検証して確かめて見てください。 --------------
以下検証: (WinXP Pro + NTFSディスクの場合)
元ファイルは、コマンドラインから 『FSUTIL FILE CREATENEW C:\TEST\SAMPLE.TXT 137438953472』 を実行する事で、128GBの巨大ファイルを作成しました。
そして、以下のコードを試して見たところ、 正しく 137,438,953,472 という値を得られました。
===== (方法1) GetFileSizeEx APIを使う方法 =====
Option Explicit
Private Declare Function GetFileSizeEx Lib "kernel32" _ (ByVal hFile As Long, ByRef lpFileSize As Currency) As Long
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" _ (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, _ ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, _ ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, _ ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" _ (ByVal hObject As Long) As Long
Private Sub Form_Load() Const GENERIC_READ As Long = &H80000000 Const FILE_SHARE_READ As Long = &H1& Const OPEN_EXISTING As Long = 3&
Dim hFile As Long hFile = CreateFile( _ "C:\test\SAMPLE.TXT", _ GENERIC_READ, _ FILE_SHARE_READ, _ ByVal 0&, _ OPEN_EXISTING, _ ByVal 0&, _ ByVal 0& _ )
Dim Size As Currency GetFileSizeEx hFile, Size Debug.Print FormatNumber(Size * 10000, 0)
CloseHandle hFile End Sub
===== (方法2) FileオブジェクトのSizeプロパティを使う方法 =====
Set FSO = CreateObject("Scripting.FileSystemObject") Set F = FSO.GetFile("C:\test\SAMPLE.TXT") Debug.Print FormatNumber(F.Size, 0) Set F = Nothing Set FSO = Nothing
|