投稿日 | : 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