标题
indy ftp 不能上传大于 2g 文件的解决
clq
浏览(3) +
2009-05-29 15:47:01 发表
编辑
关键字:
indy ftp 不能上传大于 2g 文件的解决 unit IdGlobal; function Min(AValueOne, AValueTwo: Integer): Integer;overload;//clq function Min(AValueOne, AValueTwo : int64): int64;overload;//clq //clq add function Min(AValueOne, AValueTwo : int64): int64; begin If AValueOne > AValueTwo then begin Result := AValueTwo end //If AValueOne > AValueTwo then else begin Result := AValueOne; end; //..If AValueOne > AValueTwo then end; //clq add _end; -------------------------------------------------- //clq//procedure TIdTCPConnection.WriteStream(AStream: TStream; const AAll: boolean = true; //clq const AWriteByteCount: Boolean = False; const ASize: Integer = 0); procedure TIdTCPConnection.WriteStream(AStream: TStream; const AAll: boolean = true; const AWriteByteCount: Boolean = False; const ASize: int64 = 0); var LBuffer: TMemoryStream; //clq//LSize: Integer; //clq//LStreamEnd: Integer; LSize: int64; LStreamEnd: int64; begin -------------------------------------------------- procedure TIdFTP.InternalPut(const ACommand: string; ASource: TStream); var LIP: string; LPort: Integer; //clq//LResponse: Integer; LResponse: int64;//clq begin -------------------------------------------------- 下载应该也有相同的问题,兄弟们自己改.总之就是 integer 换成 int64 .哪里有错改哪里. 不需要再安装更高版本的 indy. 只需要将 delphi7 下的相应文件复制到你的程序目录下修改就行了. 例如: C:\Program Files\Borland\Delphi7\Source\Indy
clq
附件[暂不开放下载]
上传一个文件,是我修改过的文件.编译时会说哪些文件版本不一样,把它们都复制过来就可以了. ftp.zip
clq
delphi 得idftp.put方法能否上传大于2G得文件? 楼主chinawcs()2006-10-19 14:43:15 在 Delphi / VCL组件开发及应用 提问 当我上传大于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和实际文件大小不同。 文件小得没有问题。 请大家帮忙 问题点数:50、回复次数:21Top 1 楼chinawcs()回复于 2006-10-19 15:01:54 得分 0 难道大家没有遇到过这样得问题Top 2 楼chinawcs()回复于 2006-10-19 15:20:39 得分 0 怎么这么冷清呀 Top 3 楼chinawcs()回复于 2006-10-19 16:28:25 得分 0 还没解决呢 我一上传大文件>2G得就报错:no data to read 为什么?Top 4 楼ly_liuyang(Liu Yang LYSoft http://lysoft.7u7.net)回复于 2006-10-19 16:45:10 得分 0 可以的~ 官方版本Indy 9.0.18 需要使用Int64 TSearchRec不支持的~ 直接用Win32 API才OKTop 5 楼DelphiGuy()回复于 2006-10-19 17:01:57 得分 0 TSearchRec也可以,但是要用 TSearchRec.FindData.nFileSizeHigh和nFileSizeLow两个域来读文件大小。 Top 6 楼chinawcs()回复于 2006-10-19 17:51:39 得分 0 哦原来时bug 我下载 了indy 10.0.5 请大哥明示win32 api 获取文件大小属性方法 关于TSearchRec 我是这样解决得 var s:longword; s:=SearchResult.Size 取s得值Top 7 楼DelphiGuy()回复于 2006-10-19 18:05:30 得分 0 var s: int64; // ... s := int64(SearchResult.FindData.nFileSizeHigh) shl 32 + SearchResult.FindData.nFileSizeLow; Top 8 楼chinawcs()回复于 2006-10-20 08:30:30 得分 0 谢谢 现在问题是我再idftp 得onwork , onworkbegin 里设置了gauge进度条显示上传进度 现在当我传大文件时 该过程 procedure TfrmMirrorSend.ftpClientWorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: INTEGER); AWorkCountMax: INTEGER是integer类型会溢出得。 如何解决这个问题呢? 我下载了upp_Indy_snapshot_2006-9-9.rar 不知能否解决这个问题。 Top 9 楼chinawcs()回复于 2006-10-20 09:01:44 得分 0 请大虾指点如何查看delphi 7安装自带得indy是哪个版本Top 10 楼ly_liuyang(Liu Yang LYSoft http://lysoft.7u7.net)回复于 2006-10-20 12:53:08 得分 0 用最新的Indy 9.0.18 修改4个相关文件的Integer为Int64 即可支持>2GB的文件Top 11 楼chinawcs()回复于 2006-10-20 13:22:52 得分 0 我下载了indy10.1.5_d7.exe 和indy9.0.18_d7.exe 我装后着时显示for d6 ? 我得是delphi 7.0 装前者是不是更好,安装之前要卸载delphi 自带得indy 嘛?如何卸载呢 我装了后者后发现onwork事件 还是integer类型得。?? Top 12 楼DelphiGuy()回复于 2006-10-20 14:43:46 得分 0 Gauge只是一个比例问题,你自己缩放一下就可以了。 就是累计传送的字节 / 总量 * 100,再取整。(假设gauge的最大值设置为100) 在OnWork中,AWorkCount是指本次已传送的字节数,为什么还是integer呢?因为Win32上缓冲区最大也只能开到2GB(实际比这个还要小一点),当然不可能一次发送超过2GB的数据了,那需要多次发送。 Top 13 楼DelphiGuy()回复于 2006-10-20 14:45:03 得分 0 另外,如果你有使用Indy9的项目,最好不要切换到Indy10,变化很大(为了兼容.net的缘故)。 Top 14 楼chinawcs()回复于 2006-10-20 14:56:57 得分 0 楼上朋友: 是这样得我在idftp onworkbegin 事件中 procedure TfrmMirrorSend.ftpClientWorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: INTEGER); begin ggProgress.maxvalue:=AWorkCountMax; end; 当put发生时触发此事件 AWorkCountMax获得文件大小 但AWorkCountMax是integer类型,当传送>2G时就报错溢出了 因为他只能达到20亿。 如何处理呢? Top 15 楼DelphiGuy()回复于 2006-10-20 16:12:56 得分 10 那你下一个indy9.0.19_d7,估计修正了。 Top 16 楼ly_liuyang(Liu Yang LYSoft http://lysoft.7u7.net)回复于 2006-10-20 16:14:30 得分 30 都说了~ 修改Indy 4个源文件 全部更改为Int64接口,包括函数的实现部分,(提示: ReadStream和WriteStream是关键) 修改后的Indy,支持>4GB的文件都是OK的 至于如何修改Indy,那就自己搞吧~Top 17 楼oushengfen(逸帆)回复于 2006-10-20 16:23:56 得分 5 这个倒没有遇到过,还没有上传下载那么大的文件.Top 18 楼chinawcs()回复于 2006-10-20 16:43:13 得分 0 听大哥得话 自己搞定了 该了3个pas int64就ok了 结贴了 谢谢兄弟们!Top 19 楼chinawcs()回复于 2006-10-20 17:34:43 得分 0 对 了如何卸栽 delphi 自带得indy组件包括 安装路径内容呢? 用delphi 安装盘可以嘛 ?Top 20 楼real_name(*真名)回复于 2006-10-20 19:31:17 得分 5 可以Top 21 楼chinawcs()回复于 2006-10-21 12:49:24 得分 0 已经安装编译过的组件 ok 了 就是占用内存太大了。
NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.