当前位置:主页>销售管理软件> 列表

用IdFTP1.Size(filename)取文件的容量怎 找进销存管理系统设计

销售管理软件版1楼: 我用delphi自带的idftp控件,我发现一旦这个文件的容量很大时,它就为负数,但是
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楼: 接受答案了.