[개발/delphi] 파일크기/디스크할당크기 구하는 여러가지 방법
procedure TForm1.FileListBox1Click(Sender: TObject);
var
_DirFileName:String;
FileInfo:integer;
SizeLow, SizeHigh:Dword;
FSectorsPerCluster,
FBytesPerSector,
FNumberOfFreeClusters,
FTotalNumberOfClusters:DWord;
FH : THandle;
FI : TByHandleFileInformation;
begin
_DirFileName := FileListBox1.FileName;
FileInfo := FileOpen(ExTractfilename(_DirFileName), fmOpenRead+fmShareDenyNone);
// 파일 크기 구하는 방법들
// 첫번째 방법
Edit1.Text := IntToStr( GetFileSize(FileInfo, nil) );
// 두번째, 세번째 방법
SizeLow := GetFileSize(FileInfo, @SizeHigh);
Edit2.Text := IntToStr( (SizeHigh shl 32) + SizeLow );
edit3.text := IntToStr((SizeHigh shl 32) or SizeLow);
//네번째 방법
edit4.Text := inttostr(TFileStream.Create(ExTractfilename(_DirFileName), fmOpenRead or fmShareDenyNone).size);
TFileStream.Create(ExTractfilename(_DirFileName), fmOpenRead or fmShareDenyNone).Free;
//다섯번째 방법
Edit5.Text := inttostr( fileseek(FileInfo,0,2) );
// 여섯번째 방법
FH := CreateFile(PChar(_StatusBarWrite), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
try
if FH <> INVALID_HANDLE_VALUE then
begin
if not GetFileInformationByHandle(FH, FI) then Exit;
edit6.Text := inttostr(FI.nFileSizeLow);
end;
finally
CloseHandle(FH);
end;
//클러스터 크기 구해서 파일 할당크기 구하는 방법
// GetDiskFreeSpace() API 호출
GetDiskFreeSpace(
PChar(copy(_StatusBarWrite, 1, 3)), // 디스크 루트 패스
FSectorsPerCluster, // 클러스터당 섹터수
FBytesPerSector, // 섹터당 바이트수
FNumberOfFreeClusters, // 사용하지 않은 클러스터수
FTotalNumberOfClusters // 총 클러스터수
);
//드라이브의 남은 용량 = 섹터당 바이트 X 클러스터당 섹터 X 남은 클러스터 개수
// edit5.Text := formatfloat('###,###,###,###,###', int(FSectorsPerCluster) * int(FBytesPerSector) * int(FNumberOfFreeClusters) );
//드라이브의 총 용량 = 섹터당 바이트 X 클러스터당 섹터 X 총 클러스터 개수
// edit6.Text := FormatFloat('###,###,###,###,###', int(FSectorsPerCluster) * int(FBytesPerSector) * int(FTotalNumberOfClusters) );
edit7.Text := formatfloat('###,###', ceil(GetFileSize(FileInfo, nil) / (int(FSectorsPerCluster) * int(FBytesPerSector))) );
Edit7.Text := FloatToStr (StrToInt(Edit7.Text) * (int(FSectorsPerCluster) * int(FBytesPerSector)) );
end;
user절에 math 유닉 추가[ceil() 함수 사용때문]
어떤 방법이 좋고 나쁘고 차이점 등등은 모르겠습니다.
디스크할당 크기 구할려고 여기 저기 찾고 알아보다 보니
방법이 다양하게 많더라구요.
혹시나 필요하신분 있을것 같아서 올려 드립니다.
반응형
'Delphi, RadStudio' 카테고리의 다른 글
[개발/delphi] 컨트롤 사이를 움직이는 방향키 (0) | 2012.01.11 |
---|---|
[개발/delphi] 전체화면 만들기 (0) | 2012.01.11 |
[개발/delphi] 델파이 프로그램에서 로드된 모든 리소스명 얻기 (0) | 2011.12.22 |
[개발/delphi] [강좌] 리소스의 활용 2 (0) | 2011.12.22 |
[개발/delphi] [강좌] 리소스의 활용 1 (0) | 2011.12.22 |
댓글