我的上传过程是这样的首先选择上传路径 用listview列举出要上传的文件
listview.checkboxes =true 可以选择多个文件或单个文件上传 循环listview 开始上传选中的文件fstream := TFileStream.Create(lvItem.SubItems[0],fmOpenRead);
ftpClient.Put(fstream,lvItem.Caption,false);我创建了线程单元 本想调用整个函数 可总报内存错误
后来 实在不行只把 put 一步 放到线程里 也报错
刚刚接触线程 多多指教!
listview.checkboxes =true 可以选择多个文件或单个文件上传 循环listview 开始上传选中的文件fstream := TFileStream.Create(lvItem.SubItems[0],fmOpenRead);
ftpClient.Put(fstream,lvItem.Caption,false);我创建了线程单元 本想调用整个函数 可总报内存错误
后来 实在不行只把 put 一步 放到线程里 也报错
刚刚接触线程 多多指教!
但是你不要寄望Indy自己没Bug!
对Indy源码的必要修改有时候是必要的
procedure TfrmMirrorSend.UpLoadItem(lvItem: TListItem);
var
Fstream: TFileStream;
ftpup:ftp ;begin
try
IsTransmit := True;
fstream := TFileStream.Create(lvItem.SubItems[0],fmOpenRead);
try
//首先对表操作
if SignIsoTable(strIsoID,lvItem.Caption,lvItem.SubItems[0]) then
begin lvItem.SubItems[2]:= '发送中';
ftpClient.Put(fstream,lvItem.Caption,false);
//上传完毕
ggFileSend.Progress :=0;
lvItem.SubItems[2] := '已发送'; IsTransmit := False;
end; finally
fstream.Free;
chdir(SysCfg.strFilePath);
lvItem.Update;
end; except
ggFileSend.Progress :=0;
IsTransmit := False;
lvItem.SubItems[2] := '错误';
end;
end;就是这一句想放到线程函数里 怎么写呢
ftpClient.Put(fstream,lvItem.Caption,false);
线程结束的时候要记得CoUninitialize;