저는 현재 파일 크기 측정에 아래이 함수를 사용하고 있습니다.
그런대 실행중인 파일 크기를 측정하면 0 으로 나옵니다.
다른 파일은 이상없는데 유독 MS word 를 측정하면 그렇게 나오는군요.
파일 탐색기에서 보면 멀쩡하게 나오는데 말입니다....
그전에 쓰던 함수는 그 아래에 담아두었는데 두번째 함수는 수천만 기가 바이트 형태로 나오는군요
어떻게 처리들 하고 계시는지요 ?
function F_File_Size(const xcd_File: string): Int64; // in bytes 2008-11-19 14 바꾼 이유는 ToolBar 에서 보면 word 가 실행중이면 수천 기가 바이트로 표시되는 것을 피하기 위함인데 지금은 그냥 0 으로 표시됨.
var
vHandle : THandle;
vLowPart, vHighPart : DWORD;
begin
Result := 0;
if FileExists(xcd_File) then
begin
vHandle := FileOpen(xcd_File, fmOpenRead or fmShareDenyWrite);
if vHandle > 0 then
try
vLowPart := Windows.GetFileSize(vHandle, @vHighPart);
if vLowPart <> INVALID_FILE_SIZE then
begin
TULargeInteger(Result).vLowPart := vLowPart;
TULargeInteger(Result).vHighPart := vHighPart;
end
finally
FileClose(vHandle);
end;
end;
end;
function F_File_Size(const xcd_File: string): Int64;
var
vHandle : integer;
I, J : Cardinal;
k : Int64;
begin
vHandle := CreateFile(PChar(xcd_File),
GENERIC_READ,
FILE_SHARE_READ,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
J := GetFileSize(vHandle, @I);
CloseHandle(vHandle);
if I > 0 then
begin
k := I;
k := k shl 32;
k := k + J;
end
else
k := J;
Result := k;
end;
그래서 GetFileAttributesEx 를 이용해서 해보니까 괜찮네요
<!--CodeS-->
procedure TForm1.Button3Click(Sender: TObject);
var
data : WIN32_FILE_ATTRIBUTE_DATA;
begin
if OpenDialog1.Execute then
begin
GetFileAttributesEx(PChar(OpenDialog1.FileName),GetFileExInfoStandard,@data);
ShowMessage('nFileSizeHigh='+IntToStr(data.nFileSizeHigh));
ShowMessage('nFileSizeLow='+IntToStr(data.nFileSizeLow ));
end;
end;
<!--CodeE-->
그럼..