标题
    
    
        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软件下载及使用技巧. 
    但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件. 
    验证问题说明申请入群原因即可.