怎么判断文件的大小?

zhong198801 2009-11-20 03:59:19
假设在我的电脑里有一张图片,我要知道它有多大?不用对话框如何实现?

procedure TForm1.Button1Click(Sender: TObject);
var
f:file of integer;
s:integer;
begin
assignfile(f,'我的照片.jpg');
reset(f);
s:=filesize(f);
showmessage(inttostr(s));

我试了半天未能成功?难道非要用对话框来查找文件,才能得到文件的大小吗?
...全文
196 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhong198801 2009-11-25
  • 打赏
  • 举报
回复
这次你算是做了件好事!!
[Quote=引用 12 楼 hjkto 的回复:]
Delphi(Pascal) codeprocedure TForm1.Button1Click(Sender: TObject);var
iFileSize: Integer;begin
IdHTTP1.Head('http://bbs.togame.net/attachment/Mon_0803/5_92040_ec8ef579ded1719.gif');
iFileSize:= IdHTTP1.Response.ContentLength;
ShowMessage('gif size now ='+FloatToStr((Trunc(iFileSize/1024*10))/10)+'kb');end;
这个应该是你想要!

[/Quote]
lyhoo163 2009-11-24
  • 打赏
  • 举报
回复
up
notebook800 2009-11-24
  • 打赏
  • 举报
回复
var
hConnect: HINTERNET;
hRequest: HINTERNET;

dwFileSize: DWORD;
dwError: DWORD;
dwPosition: DWORD;
dwBytesRead: DWORD;

bTerminate: LongBool;
bSucceed: LongBool;

lpBuffer: Pointer;

f: file;
begin
hConnect := InternetConnect;//创建连接
hRequest := HttpOpenRequest(hConnect);

while not HttpSendRequest(hRequest) do//发送请求
begin
dwError := GetLastError();
if (dwError = ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED) and
(InternetErrorDlg(hConnect) = ERROR_SUCCESS) then
Continue;

InternetCloseHandle(hRequest);
InternetCloseHandle(hConnect);
exit;
end;

if not HttpQueryInfo(hRequest, dwFileSize) then exit;//取得服务器文件长度


try
AssignFile(f, FFielName);
Rewrite(f, 1);
dwPosition := 0; //启始位置

if Assigned(FOnOpenWork) then FOnOpenWork(self, dwFileSize);

bSucceed := false;
bTerminate := false;

while true do
begin
if Assigned(FOnOverWork) then FOnOverWork(self, dwPosition, bTerminate);//OnOverWork事件,用来显示文件下载进度
if bTerminate then Break;
if not InternetReadFile(hRequest, dwPosition, dwBytesRead, lpBuffer) then Break;
if dwBytesRead = 0 then
begin
bSucceed := true;
Break;
end;
BlockWrite(f, lpBuffer^, dwBytesRead);//写块lpBuffer
end;
if Assigned(FOnCloseWork) then FOnCloseWork(self, bSucceed);//OnCloseWork下载工作关闭时间
CloseFile(f);

finally
InternetCloseHandle(hRequest);
InternetCloseHandle(hConnect);
end;
end;


以上是部分文件下载的部分代码
notebook800 2009-11-24
  • 打赏
  • 举报
回复
function TWebWorld.HttpQueryInfo(hRequest: HINTERNET; var dwFileSize: DWORD): LongBool;
var
dwBufferSize: DWORD;
dwIndex: DWORD;

InfoBuffer: array[1..32] of Byte;

Info: string;
bQuery: LongBool;
begin
dwBufferSize := 32;
dwIndex := 0;

bQuery := WiniNet.HttpQueryInfo(hRequest, HTTP_QUERY_CONTENT_LENGTH, @InfoBuffer, dwBufferSize, dwIndex);

if bQuery then
begin
Info := pChar(@InfoBuffer);
dwFileSize := SysUtils.StrToInt(Info);
end;

result := bQuery;
end;
dinoalex 2009-11-21
  • 打赏
  • 举报
回复
var
theFile: TFileStream;
begin
if FileExists('我的照片.jpg') then
begin
theFile:= TFileStream.Create('我的照片.jpg',fmOpenRead);
showmessage(FloattoStr(Trunc(SelectedFile.Size / 1024 * 100) / 100) +' KB');
theFile.free;
end;
end;
hjkto 2009-11-21
  • 打赏
  • 举报
回复

procedure TForm1.Button1Click(Sender: TObject);
var
iFileSize: Integer;
begin
IdHTTP1.Head('http://bbs.togame.net/attachment/Mon_0803/5_92040_ec8ef579ded1719.gif');
iFileSize:= IdHTTP1.Response.ContentLength;
ShowMessage('gif size now = '+FloatToStr((Trunc(iFileSize/1024 * 10))/10)+'kb');
end;

这个应该是你想要!
hjkto 2009-11-21
  • 打赏
  • 举报
回复
to 8

procedure TForm1.Button6Click(Sender: TObject);
var
h:TIdhttp;
f:file of byte;
MyStream:TMemoryStream;
begin
MyStream:=TMemoryStream.Create;
h:=Tidhttp.Create(nil);
try
h.get('http://bbs.togame.net/attachment/Mon_0803/5_92040_ec8ef579ded1719.gif',MyStream);
except
showmessage('网络出错!');
MyStream.Free;
exit;
end;
MyStream.SaveToFile('c:\1.gif');
//sleep(100);
assignfile(f,'c:\1.gif');
reset(f);
ShowMessage('gif size now = '+FloatToStr((Trunc(FileSize(f)/1024 * 10))/10)+'kb');
MyStream.Free;
end;
凯文2016 2009-11-20
  • 打赏
  • 举报
回复
樓主的也能得出結果吧。只是得出的大小的單位可能是‘32bit’,而不是Byte(8bit)
虎滴小猪猪 2009-11-20
  • 打赏
  • 举报
回复
楼上几个说的都可以哈哈。
suuuu 2009-11-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hjkto 的回复:]
Delphi(Pascal) codeprocedure TForm1.Button1Click(Sender: TObject);var
f:fileof Byte;begin
assignfile(f,'c:\2.jpg');
reset(f);
ShowMessage('File size now ='+IntToStr(FileSize(f)));end;
[/Quote]
up~
yktd26 2009-11-20
  • 打赏
  • 举报
回复
露个脸
zhong198801 2009-11-20
  • 打赏
  • 举报
回复
假设这个文件是网络链接,那怎么得到它的大小呢?
如:
var
f:file of integer;
s:integer;
begin
assignfile(f,'http://bbs.togame.net/attachment/Mon_0803/5_92040_ec8ef579ded1719.gif');
reset(f);
s:=filesize(f);
showmessage(inttostr(s));
end;
zhong198801 2009-11-20
  • 打赏
  • 举报
回复
海啸,这次池回大哥了!
[Quote=引用 2 楼 hjkto 的回复:]
Delphi(Pascal) codeprocedure TForm1.Button1Click(Sender: TObject);var
f:fileof Byte;begin
assignfile(f,'c:\2.jpg');
reset(f);
ShowMessage('File size now ='+IntToStr(FileSize(f)));end;
[/Quote]
notebook800 2009-11-20
  • 打赏
  • 举报
回复
var
iFileHandle: Integer;
iFileLength: Integer;
begin
if OpenDialog1.Execute then
begin
iFileHandle := FileOpen(OpenDialog1.FileName, fmOpenRead);
iFileLength := FileSeek(iFileHandle, 0, 2);
end;
end;
hjkto 2009-11-20
  • 打赏
  • 举报
回复

procedure TForm1.Button1Click(Sender: TObject);
var
f:file of Byte;
begin
assignfile(f,'c:\2.jpg');
reset(f);
ShowMessage('File size now = '+IntToStr(FileSize(f)));
end;
fjtxwd 2009-11-20
  • 打赏
  • 举报
回复
大小已经在S里了,直接可以拿来用啊,你想怎么样就怎么样啊
不用showmessage可以用另外方式啊

5,931

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧