FAT32에서는 2GB가 파일의 한계이지만
NTFS는 제한이 거의 없는 것으로 알고 있는데
SHGetFileInfo, SHGetDataFromIDList 라는 win api로
6GB 파일의 정보를 읽어오니 파일크기가 0xffffffff로 됩니다.
음... 어떻게 알아와야 할 지 알 수 있을까요?
function GetFileSizeInt64(FileName:String):Int64;
var
FileHandle:integer;
i,j:Cardinal;
k:int64;
begin
FileHandle:=CreateFile(pchar(FileName),
GENERIC_READ,
FILE_SHARE_READ,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,0);
j:=GetFileSize(FileHandle,@i);
CloseHandle(FileHandle);
if i>0 then begin
k:=i;
k:=k shl 32;
k:=k+j;
end else k:=j;
Result:=k;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
FileSize:Int64;
begin
FileSize:=GetFileSizeInt64('C:FileName.Ext');
ShowMessage(inttostr(FileSize));
end;
FAT32에서는 2GB가 파일의 한계이지만 NTFS는 제한이 거의 없는 것으로 알고 있는데 SHGetFileInfo, SHGetDataFromIDList 라는 win api로 6GB 파일의 정보를 읽어오니 파일크기가 0xffffffff로 됩니다. 음... 어떻게 알아와야 할 지 알 수...
양상훈
•
2002.09.07 20:31
function GetFileSizeInt64(FileName:String):Int64;
var
FileHandle:integer;
&nb...
function GetFileSizeInt64(FileName:String):Int64;
var
FileHandle:integer;
i,j:Cardinal;
k:int64;
begin
FileHandle:=CreateFile(pchar(FileName),
GENERIC_READ,
FILE_SHARE_READ,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,0);
j:=GetFileSize(FileHandle,@i);
CloseHandle(FileHandle);
if i>0 then begin
k:=i;
k:=k shl 32;
k:=k+j;
end else k:=j;
Result:=k;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
FileSize:Int64;
begin
FileSize:=GetFileSizeInt64('C:FileName.Ext');
ShowMessage(inttostr(FileSize));
end;