旧事重提-多线程文件读取和保存(300分)

  • 主题发起人 DreamTiger
  • 开始时间
D

DreamTiger

Unregistered / Unconfirmed
GUEST, unregistred user!
问题来源:
用TIdFtpServer写ftpserver,
procedure TMainForm.IdFTPServer1RetrieveFile(ASender: TIdFTPServerThread;
AFilename: String;
var VStream: TStream);
begin
VStream := TFileStream.Create(AFileName,fmOpenRead,fmShareDenyNone);
end;
用flashget去拉,第一辆小车拉了就跑,第二辆小车一来,就出错:文件不能打开。
问题:
1、fmShareDenyNone是否意味着,只有别的程序能够再打开该文件,而自己程序中,
只能打开一次,就算是在多线程中也不行?
2、如果1成立,那么,多线程写是否也就是不可能的事情?最多实现多线程从网上
读取数据,单线程写?
分数不是问题,希望这个问题这次能够有个圆满解决方案。
 
我做的没有问题呀,N个线程同时读写一个文件,很正常
 
多线程上传?没听说过,也没见过那个软件支持。
 
多线程上传和多线程下载,只要服务器支持移动文件指针,都应该可以用的
 
不会吧? 如果文件尺寸只有1k,而某一个线程要求写2k位置处的字节,请问
系统应如何处理?
 
而且,奇怪的是,我的indy里面根本没有TIdFtpServer这个控件,只有一个
IdTrivialFTPServer,事件也根本不一样啊。我的是9.0版。
 
你先把这个文件的尺寸告诉服务器, 服务器建一个一样大小的空文件,你说还有问题吗?
 
这样就不是ftp协议了,小伙子。那还不如自己写一个文件服务器呢
 
TFileStream.Create(File_Name,fmShareDenyNone or fmOpenRead);
 
张无忌:
多谢多谢,我写成
TFileStream.Create(File_Name,fmShareDenyNone or fmOpenRead);
就可以用flashget多线程下载了,那么,如果自己写多线程下载的
应该也差不多。
我是看TFileStream地说明写的,没想到
TFileStream.Create(File_Name,fmOpenRead,fmShareDenyNone);
居然是错的。你已经有了300分了。
如果能够寄给我你的多线程下载保存的例子,那么,我会另开
300分,多谢。
一个过客:
tidftpserver是beta版的功能,你可以直接登陆
ftp://indy90:indy90@ftp.nevrona.com
下载所有源码。
 
接受答案了.
 
To DreamTiger
你提供的ftp地址现在不行了啊,有没新的,兄弟刚来。多谢
 
顶部