델파이(Delphi)는 다양한 방법으로 파일의 크기를 확인할 수 있는 강력한 프로그래밍 언어입니다. 파일 크기를 확인하는 것은 여러 상황에서 유용하며, 이 글에서는 델파이에서 파일 사이즈를 확인하는 다양한 방법을 소개합니다. 각 방법은 특정 상황에 맞게 사용할 수 있으며, 코드 예제와 함께 설명하겠습니다.
첫 번째 방법: TSearchRec를 이용한 파일 사이즈 확인
TSearchRec 구조체 사용
TSearchRec 구조체를 사용하여 파일의 크기를 확인할 수 있습니다. 이 방법은 간단하고 효율적이며, 파일의 크기를 바이트 단위로 반환합니다.
function FileSize(fileName : wideString) : Int64;
var
sr : TSearchRec;
begin
if FindFirst(fileName, faAnyFile, sr) = 0 then
result := Int64(sr.FindData.nFileSizeHigh) shl Int64(32) + Int64(sr.FindData.nFileSizeLow)
else
result := -1;
FindClose(sr);
end;
설명
위 코드에서 FindFirst 함수는 지정된 파일을 찾고, TSearchRec 구조체를 통해 파일 정보를 가져옵니다. 파일 크기는 nFileSizeHigh와 nFileSizeLow 필드를 조합하여 얻습니다. 파일을 찾지 못하면 -1을 반환합니다.
두 번째 방법: 파일을 열어 크기 확인
파일 핸들을 사용하여 파일 사이즈 확인
이 방법은 파일을 직접 열고, 파일 크기를 확인하는 방법입니다. 예외 처리를 통해 파일이 열리지 않는 경우도 처리할 수 있습니다.
function GetFileSize(AFileName: string; ASkip: boolean = false): Integer;
var
f: file of Byte;
size: Longint;
flag: boolean;
begin
flag := false;
while not flag do
begin
Application.ProcessMessages;
if FStopFlag then
break;
if FileExists(AFileName) then
begin
try
size := 0;
AssignFile(f, AFileName);
reset(f);
size := FileSize(f);
CloseFile(f);
flag := true;
except
on e:Exception do
begin
flag := ASkip;
size := -1;
end;
end;
end;
end;
result := size;
end;
설명
이 코드에서는 파일이 존재하는지 확인한 후, 파일을 열고 크기를 확인합니다. 예외가 발생할 경우 파일 크기를 -1로 설정하며, flag 변수를 사용하여 반복을 제어합니다.
세 번째 방법: 다양한 방법을 사용한 파일 사이즈 확인
Get_File_Size1: CreateFile 함수 사용
function Get_File_Size1(sFileToExamine: string; bInKBytes: Boolean): string;
var
FileHandle: THandle;
FileSize: LongWord;
d1: Double;
i1: Int64;
begin
FileHandle := CreateFile(PChar(sFileToExamine),
GENERIC_READ,
0, {exclusive}
nil, {security}
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
FileSize := GetFileSize(FileHandle, nil);
Result := IntToStr(FileSize);
CloseHandle(FileHandle);
if bInKbytes = True then
begin
if Length(Result) > 3 then
begin
Insert('.', Result, Length(Result) - 2);
d1 := StrToFloat(Result);
Result := IntToStr(round(d1)) + 'KB';
end
else
Result := '1KB';
end;
end;
설명
이 함수는 CreateFile 함수를 사용하여 파일을 열고, GetFileSize 함수를 통해 파일 크기를 확인합니다. bInKBytes 매개변수를 통해 결과를 킬로바이트 단위로 반환할지 여부를 설정할 수 있습니다.
Get_File_Size2: TSearchRec와 FindFirst 함수 사용
function Get_File_Size2(sFileToExamine: string; bInKBytes: Boolean): string;
var
SearchRec: TSearchRec;
sgPath: string;
inRetval, I1: Integer;
begin
sgPath := ExpandFileName(sFileToExamine);
try
inRetval := FindFirst(ExpandFileName(sFileToExamine), faAnyFile, SearchRec);
if inRetval = 0 then
I1 := SearchRec.Size
else
I1 := -1;
finally
SysUtils.FindClose(SearchRec);
end;
Result := IntToStr(I1);
end;
설명
이 함수는 첫 번째 방법과 유사하게 TSearchRec 구조체를 사용하여 파일의 크기를 확인합니다. 다만, 파일 경로를 확장한 후 FindFirst 함수를 호출합니다.
네 번째 방법: Win32 API 사용
Get_File_Size3: TWin32FindData 구조체 사용
function Get_File_Size3(const FileName: string): TULargeInteger;
var
Find: THandle;
Data: TWin32FindData;
begin
Result.QuadPart := -1;
Find := FindFirstFile(PChar(FileName), Data);
if (Find <> INVALID_HANDLE_VALUE) then
begin
Result.LowPart := Data.nFileSizeLow;
Result.HighPart := Data.nFileSizeHigh;
Windows.FindClose(Find);
end;
end;
설명
이 함수는 Win32 API를 사용하여 파일 크기를 확인합니다. FindFirstFile 함수를 호출하여 파일 정보를 가져오고, TWin32FindData 구조체를 통해 파일 크기를 얻습니다.
Get_File_Size4: Win32 API를 이용한 또 다른 방법
function Get_File_Size4(const S: string): Int64;
var
FD: TWin32FindData;
FH: THandle;
begin
FH := FindFirstFile(PChar(S), FD);
if FH = INVALID_HANDLE_VALUE then Result := 0
else
try
Result := FD.nFileSizeHigh;
Result := Result shl 32;
Result := Result + FD.nFileSizeLow;
finally
CloseHandle(FH);
end;
end;
설명
이 방법도 Win32 API를 사용하며, FindFirstFile과 TWin32FindData 구조체를 사용하여 파일 크기를 확인합니다. 파일 크기를 확인한 후 핸들을 닫아줍니다.
결론
델파이에서 파일 사이즈를 확인하는 방법은 다양하며, 각 방법은 특정 상황에 맞게 사용될 수 있습니다. TSearchRec 구조체, 파일 핸들, Win32 API 등을 사용하여 파일 크기를 효율적으로 확인할 수 있습니다. 각 방법의 코드 예제를 참고하여 자신에게 맞는 방법을 선택해 사용하시기 바랍니다.
'delphi' 카테고리의 다른 글
TBitmap32 메모리 누수 해결 방법 (0) | 2024.08.02 |
---|---|
델파이에서 비트맵 인쇄하기 (0) | 2024.08.02 |
IDENTITY 컬럼의 현재값 알기 및 수정 (0) | 2024.08.01 |
설정된 프린터 용지 얻기 및 설정하기 (0) | 2024.07.31 |
DLL을 이용한 마우스 전역 후킹(Hooking) (0) | 2024.07.31 |