如何得到文件的大小(200分)

  • 主题发起人 主题发起人 ahf
  • 开始时间 开始时间
A

ahf

Unregistered / Unconfirmed
GUEST, unregistred user!
我调用windows API中的getfilesize为什么得
不到结果,还有如何删除不是文本文件的文件
我曾经用deletefile 和openfile 都不行。
请问各位高手如何解决这些问题。
十万火急。。。
 
1.
function FSize(FileName: string): LongInt;
var
F: File;
begin
AssignFile(F, FileName);
reset(F,1);
Result := FileSize(F);
CloseFile(F);
end;

2. DeleteFile('c:/test.doc'); // no problem
 
上面的程序肯定没问题
只有正在运行的应用程序、动态库、驱动程序等无法删除
 
分特,被你抢了先,呵呵
分点分给我吧:)
 
1:
procedure TForm1.Button1Click(Sender: TObject);
var
f:file of byte;
size:longint;
begin
if OpenDialog1.execute
then begin
assignfile(f,OpenDialog1.filename);
reset(f);
size:=filesize(f);
edit1.text:=inttostr(size);
closefile(f);
end;
end;
 
为什么文件大小和资源管理器中看见的不一样。
 

在 Dos 方式下看看, 资源管理器中是以 K 为单位的
 
请问那删除.zip文件可以吗?
我用deletefile()函数还是不行啊!
我用的是delphi5.0
 
因为FILESIZE()函数返回的是实际占用字节数
而资源管理器自己将文件大小还加上了一些相关文件联接或者其他不知道的信息保存在WINDOWS里
所以显示总是比实际大小大
例如本来占用3000字节,显示就是31XX自己左右

 

删除什么文件都是一样的,除非这个文件已打开或正在使用或无权限,Delphi5无关
 
而我用filesize()函数取出的文件大小
总是比资源管理器中显示的大。
为什么?
 

在资源管理器中,按右键,然后选属性看看
 
你把用FileSize()取出的文件尺寸除以1024,就同资源管理器中的一样了。(单位是K)。
另外,在9x中用DeleteFile(filename)没有问题(不管文件是否打开还是关闭),而在
NT中必须确保文件关闭。
来自MSDN
Windows 95: The DeleteFile function deletes a file even if it is open for normal I/O or as a memory-mapped file. To prevent loss of data, close files before attempting to delete them.

Windows NT: The DeleteFile function fails if an application attempts to delete a file that is open for normal I/O or as a memory-mapped file.

To close an open file, use the CloseHandle function.

 
康夫还是不行。
 
吕雪松:
我取出文件大小有的好象就是K但是一点规律也找不到
我是在windowsnt workstation上编的程序。
deletefile 的问题我已经发现了因为我的文件是只读文件
所以不能删除。
 

If this file is not used by windows or other program , you can restart your
computer and then delete it, I believe you can delete it.
 
文件的大小有三种指标
1)实际大小:就是FileSize取得的,精确到字节
2)按扇区计算的大小,以K表示
3)按簇计算的大小,精确到字节

3>2>1
 
取得一个文件的大小也可以用findfirstfile取得信息,好象要比你说的要好一点,
要删除的话,可以用API
SHFileOperation实现
procedure Tgeren.SpeedButton2Click(Sender: TObject);
VAR
APATH:ANSISTRING;
LPFILEOP:TSHFILEOPSTRUCT;
I,N:INTEGER;
begin
IF CHECKLISTBOX1.Items.Count<>0 THEN
BEGIN
N:=CHECKLISTBOX1.Items.Count;
I:=0;
WHILE I<N DO
BEGIN
IF CHECKLISTBOX1.Checked THEN
BEGIN
APATH:=APATH+CHECKLISTBOX1.Items.Strings+#0;
I:=I+1;
END
ELSE
I:=I+1;
END;

APATH:=APATH+#0;

LPFILEOP.Wnd:=SELF.Handle;
LPFILEOP.wFunc:=FO_DELETE;
LPFILEOP.pFrom:=PCHAR(APATH);
LPFILEOP.pTo:=NIL;
IF CHECKBOX1.Checked=TRUE THEN
LPFILEOP.fFlags:=FOF_NOCONFIRMATION
ELSE
LPFILEOP.fFlags:=FOF_ALLOWUNDO;
LPFILEOP.hNameMappings:=NIL;
LPFILEOP.lpszProgressTitle:=NIL;
LPFILEOP.fAnyOperationsAborted:=TRUE;

IF SHFileOperation(LPFILEOP)=0 THEN
BEGIN
CHECKLISTBOX1.Items.Clear;
PANEL1.Caption:='有'+inttostr(CHECKLISTBOX1.items.count)+'文件选定';
CHECKBOX1.Checked:=FALSE;
END
ELSE
SHOWMESSAGE('删除文件失败!');
END

ELSE
BEGIN
SHOWMESSAGE('没有文件被选定,请选择文件!');
END;

end;

有问题mail to :loopy@netease.com
 
your program is right!
i argee iie's idea!
 
后退
顶部