[リストへもどる]
一括表示

投稿時間:2004/05/24(Mon) 18:39
投稿者名:dada
Eメール:
URL :
タイトル:
VBでファイルサイズ取得
VBで1ファイル5GB以上のファイルのファイルサイズを
取得したいのですが可能でしょうか?

当方
OS:Win2000
VB Ver6

投稿時間: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

投稿時間:2004/05/25(Tue) 09:45
投稿者名:dada
Eメール:
URL :
タイトル:
Re^2: VBでファイルサイズ取得
ありがとうございます。

方法2で解決しました