用IdFTP1.Size(filename)取文件的容量怎 找进销存管理系统设计
Total:=IdFTP1.Size(filename),这个total的类型为int64,怎么也会这样啊!
2楼: 文件大小会不会大于2G.很多Size都是用Integer类型.而Integer类型只能显示2G的大小.超过2G会出现负数的错误. 如进销存管理系统设计
3楼: 是大于2G,那有怎么解决的方法吗?
4楼: 打开idftp所属单元.找到size的定义,把Integer类型改成int64,应该就可以.
5楼: 关键是IdFTP1.Size这个属性为Integer型,所以不管你赋给哪个int64变量,都改变不了已经发生的实事.照我刚才说的去改idftp的单元就可以了.
6楼: delphi安装目录下\Source\indy\idftp.pas
把下面
function Size(const AFileName: string): Intger;
改为
function Size(const AFileName: string): Int64;
保存后再编译,好象还是不行.
销售管理软件版7楼: 我给你改好了.
function TIdFTP.Size(const AFileName: String): int64;
var
SizeStr: String;
begin
result := -1;
if SendCmd(''SIZE '' + AFileName) = 213 then begin {Do not translate}
SizeStr := Trim(LastCmdResult.Text.Text);
system.delete(SizeStr, 1, IndyPos('' '', SizeStr)); // delete the response {Do not translate}
result := StrToInt64Def(SizeStr, -1);
end;
end;
8楼: benhacker:谢谢。
我改的跟你一样,保存编译后,输出还是-1(但文件实际容量为4.6G)
9楼: 改成下面这样,然后再编译,看看返回的大小是-1还是-2,现在我们要找到它错在哪里.
function TIdFTP.Size(const AFileName: String): int64;
var
SizeStr: String;
begin
result := -1;
if SendCmd(''SIZE '' + AFileName) = 213 then begin {Do not translate}
SizeStr := Trim(LastCmdResult.Text.Text);
system.delete(SizeStr, 1, IndyPos('' '', SizeStr)); // delete the response {Do not translate}
result := StrToInt64Def(SizeStr, -2);
end;
end;
10楼: 接受答案了.