2008年7月13日

ファイルサイズの取得

フルパス名からファイルのサイズを取得する方法は色々考えられますが、直球なのはFindFirstFileでFindDataのnFileSizeLowとnFileSizeHighから計算する方法でしょうか。
uses
  Windows;

function GetFileSize(const Filename: String; var FileSize: Int64): Boolean;
var
  Handle: THandle;
  FindData: TWin32FindData;
begin

  FileSize := 0;
  Handle := Windows.FindFirstFile(PChar(Filename),FindData);
  if Handle <> INVALID_HANDLE_VALUE then
  begin
    Windows.FindClose(Handle);
    FileSize := FindData.nFileSizeLow or Int64(FindData.nFileSizeHigh) shl 32;
    Result := True;
    Exit;
  end;
  Result := False;

end;

戻値がTrueならばFileSizeに取得したファイルサイズが格納されています。

2008/12/16追記: KB961110の問題を回避するためにWin32APIのGetFileSizeExを使用する方法をファイルサイズを取得する(2)に示しました。

0 件のコメント: