在onWorkEnd事件中.自动打开刚下载的文件. 除EXE文件打不开外。其它都能打开。是什么原因啊

解决方案 »

  1.   

    在线程里传,我一个activexform也是这样。什么文件都能传,用流就没错了
      

  2.   

    在线程里传,随上我的一段代码(研究了好几天才弄出来的哦)unit UnitUpExamThread;interfaceuses
      Classes, IdFTP, SysUtils, DateUtils, ComCtrls, IdComponent;type
      TUpExamThread = class(TThread)
        procedure FIdFTPWork(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer);
      private
        { Private declarations }
        FFileName: String;
        FDirectory: String;
        FIdFTP: TIdFTP;
        FUpLoadMax: Integer;
        FUpLoadFinish: Integer;
        FStartTime: TDateTime;
      protected
        procedure Execute; override;
      public
        constructor Create(tServer, LFile, SFile: String);  //localfile, serverfile
        destructor Destroy; override;
        function GetUpLoadPercent(): Byte;
        function GetEscapeSeconds(): Integer;
        function GetSpeedAvg(): Integer;  //以KB为单位
      end;implementation{ TUpExamThread }constructor TUpExamThread.Create(tServer, LFile, SFile: String);
    begin
      FFileName := LFile;
      FDirectory := SFile;
      FIdFTP := TIdFTP.Create(nil);
      FIdFTP.OnWork := FIdFTPWork;
      FIdFTP.Host := tServer;
      FIdFTP.User := 'IEUp';
      FIdFTP.Password := 'IEUpLoad';
      FStartTime := Now();  FreeOnTerminate := True;
      inherited Create(False);
    end;procedure TUpExamThread.FIdFTPWork(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCount: Integer);
    begin
      FUpLoadFinish := AWorkCount;
    end;function TUpExamThread.GetEscapeSeconds(): Integer;
    begin
      Result := SecondsBetween(Now(), FStartTime);
    end;function TUpExamThread.GetUpLoadPercent(): Byte;
    begin
      Result := 0;
      if FUpLoadMax > 0 then Result := (FUpLoadFinish * 100) div FUpLoadMax;
    end;function TUpExamThread.GetSpeedAvg(): Integer;  //以KB为单位
    begin
      Result := 0;
      if GetEscapeSeconds() > 0 then Result := (FUpLoadFinish div 1024) div GetEscapeSeconds();
    end;procedure TUpExamThread.Execute;
    var
      SourceFileStream : TFileStream;
    begin
      SourceFileStream := TFileStream.Create(FFileName, fmShareDenyNone);
      FUpLoadMax := SourceFileStream.Size;
      SourceFileStream.Free;  FIdFTP.Connect(True);  FIdFTP.MakeDir(FDirectory);
      FIdFTP.ChangeDir(FDirectory);
      FIdFTP.Put(FFileName, FDirectory + ExtractFileExt(FFileName), True);
      FIdFTP.Disconnect;
    end;destructor TUpExamThread.Destroy;
    begin
      FIdFTP.Free;
      inherited Destroy;
    end;end.
      

  3.   

    在窗口上放一个TIdAntiFreeze控件
      

  4.   

    TO:blueshrimp(下着沙-软件民工) 
    程序死的问题解决了.谢谢.
    但是在workend中不能打开EXE文件是什么回事呢?