delphi 得idftp.put方法能否上传大于2G得文件?

chinawcs 2006-10-19 02:43:15
当我上传大于2G得文件时put方法就报错:no data to trasfer 小于2G得没事
这是为什么呢?难到是bug?
大家给个解决办法呀 我得文件都是DVD盘制作得iso文件所以很大

另一个问题:
我搜索一个文件夹得全部文件 不包括下一级文件夹得文件
...
dim s as string
SearchResult: TSearchRec;
......
s:=Format('%.2f',[SearchResult.Size/(1024*1024)])

当文件比较大时 (大约2G左右)s返回'-XX' 而且数值xx和实际文件大小不同。
文件小得没有问题。
请大家帮忙

...全文
701 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinawcs 2006-10-21
  • 打赏
  • 举报
回复
已经安装编译过的组件

ok 了

就是占用内存太大了。
ly_liuyang 2006-10-20
  • 打赏
  • 举报
回复
用最新的Indy 9.0.18
修改4个相关文件的Integer为Int64
即可支持>2GB的文件
chinawcs 2006-10-20
  • 打赏
  • 举报
回复
请大虾指点如何查看delphi 7安装自带得indy是哪个版本
chinawcs 2006-10-20
  • 打赏
  • 举报
回复
谢谢

现在问题是我再idftp 得onwork , onworkbegin 里设置了gauge进度条显示上传进度
现在当我传大文件时 该过程
procedure TfrmMirrorSend.ftpClientWorkBegin(Sender: TObject;
AWorkMode: TWorkMode; const AWorkCountMax: INTEGER);

AWorkCountMax: INTEGER是integer类型会溢出得。
如何解决这个问题呢?

我下载了upp_Indy_snapshot_2006-9-9.rar 不知能否解决这个问题。
real_name 2006-10-20
  • 打赏
  • 举报
回复
可以
chinawcs 2006-10-20
  • 打赏
  • 举报
回复
对 了如何卸栽 delphi 自带得indy组件包括 安装路径内容呢?
用delphi 安装盘可以嘛 ?
chinawcs 2006-10-20
  • 打赏
  • 举报
回复
听大哥得话

自己搞定了 该了3个pas int64就ok了
结贴了

谢谢兄弟们!
oushengfen 2006-10-20
  • 打赏
  • 举报
回复
这个倒没有遇到过,还没有上传下载那么大的文件.
ly_liuyang 2006-10-20
  • 打赏
  • 举报
回复
都说了~
修改Indy 4个源文件
全部更改为Int64接口,包括函数的实现部分,(提示: ReadStream和WriteStream是关键)

修改后的Indy,支持>4GB的文件都是OK的

至于如何修改Indy,那就自己搞吧~
  • 打赏
  • 举报
回复
那你下一个indy9.0.19_d7,估计修正了。
chinawcs 2006-10-20
  • 打赏
  • 举报
回复
楼上朋友:

是这样得我在idftp onworkbegin 事件中

procedure TfrmMirrorSend.ftpClientWorkBegin(Sender: TObject;
AWorkMode: TWorkMode; const AWorkCountMax: INTEGER);
begin
ggProgress.maxvalue:=AWorkCountMax;
end;
当put发生时触发此事件 AWorkCountMax获得文件大小
但AWorkCountMax是integer类型,当传送>2G时就报错溢出了 因为他只能达到20亿。
如何处理呢?
  • 打赏
  • 举报
回复
另外,如果你有使用Indy9的项目,最好不要切换到Indy10,变化很大(为了兼容.net的缘故)。
  • 打赏
  • 举报
回复
Gauge只是一个比例问题,你自己缩放一下就可以了。
就是累计传送的字节 / 总量 * 100,再取整。(假设gauge的最大值设置为100)
在OnWork中,AWorkCount是指本次已传送的字节数,为什么还是integer呢?因为Win32上缓冲区最大也只能开到2GB(实际比这个还要小一点),当然不可能一次发送超过2GB的数据了,那需要多次发送。
chinawcs 2006-10-20
  • 打赏
  • 举报
回复
我下载了indy10.1.5_d7.exe 和indy9.0.18_d7.exe

我装后着时显示for d6 ?
我得是delphi 7.0

装前者是不是更好,安装之前要卸载delphi 自带得indy 嘛?如何卸载呢

我装了后者后发现onwork事件 还是integer类型得。??



  • 打赏
  • 举报
回复
var
s: int64;
// ...
s := int64(SearchResult.FindData.nFileSizeHigh) shl 32 + SearchResult.FindData.nFileSizeLow;
chinawcs 2006-10-19
  • 打赏
  • 举报
回复
哦原来时bug 我下载 了indy 10.0.5
请大哥明示win32 api 获取文件大小属性方法

关于TSearchRec 我是这样解决得
var s:longword;

s:=SearchResult.Size

取s得值
  • 打赏
  • 举报
回复
TSearchRec也可以,但是要用
TSearchRec.FindData.nFileSizeHigh和nFileSizeLow两个域来读文件大小。
ly_liuyang 2006-10-19
  • 打赏
  • 举报
回复
可以的~
官方版本Indy 9.0.18

需要使用Int64
TSearchRec不支持的~
直接用Win32 API才OK
chinawcs 2006-10-19
  • 打赏
  • 举报
回复
还没解决呢
我一上传大文件>2G得就报错:no data to read
为什么?
chinawcs 2006-10-19
  • 打赏
  • 举报
回复
怎么这么冷清呀
加载更多回复(1)

5,392

社区成员

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

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