2011-11-12 11 views
2
IdFTP: TIdFTP; 
... 
procedure TForm1.IdFTPWorkEnd(ASender: TObject; AWorkMode: TWorkMode); 
begin 
    IdFTP.Disconnect; 

    try 

     IdFTP.Connect; 

     IdFTP.ChangeDir(directory); 
     IdFTP.Put(fileName, ExtractFileName(fileName)); 

    except 

    end; 

end; 

これはほとんどのコードです。 完全な1つのアップロードは別のを開始するとき、私は希望しますが、このコードは、エラー10048インディFTPクライアントが別のアップロードを開始しようとしたときにエラーが発生しましたか?

  • それがサーバーにファイルやコマンドのシーケンスをアップロードする正しい方法はあるが上昇するようですか?
  • なぜこのエラー10048が起きているのですか?
+0

:別のファイルをアップロードするための正しい方法は、単にPut()終了し、例えば前回の呼び出し後に再度Put()を呼び出すことですか?ユーザー名とパスワードをどのように設定しますか?アクティブ対受動? Binmodeとascii?私はあなたのために何をしていますか?ここにはあまりコードはありませんが、バグを持つ場所がもっとあるはずです。 – sarnold

+0

i - プロシージャ内の他のコードから左に移動します。 (取り外された)。サーバはポート21に接続され、転送タイプはバイナリ、アクティブモードです。すべての接続を受け入れるように設定されています(匿名モード)。 –

+0

IdFTPのonWorkEndプロシージャのものです。 –

答えて

3

既に使用中のエラー10048 =ソケット:info

あなたはWorkEndイベントを必要としない、ファイルのアップロードとその完成したときの文のリターンを入れて:

// loop 
    for I := 0 to files.Count-1 do 
    begin 
    idFtp1.Connect; 
    idFtp1.Put(files[i]); 
    idFtp1.Disconnect; 
    end; 

    // or 
    idFtp1.Put('MyFirstFile'); 
    idFtp1.DisConnect; 
    // ...... 
    idFtp1.Connect; 
    idFtp1.ChangeDir('DirSecondFile'); 
    idFtp1.Put('MySecondFile'); 
+0

これも同様に行いますが、試したやり方でファイルをアップロードした後に何らかの接続を解除して再接続する方法がありますか? –

+0

私の答えは –

+0

ありがとうございました。 :)これは仕事をした! :) –

4

は使用しないでくださいOnWork...あなたのビジネスロジックを動かすイベント!それらはステータスのみのためのものです。ほとんどの場合、Indyはイベント駆動ではなく、わずかな例外を除いています。

この場合、OnWorkEndは、生のファイルデータが送信された後にトリガーされますが、アップロードに対するサーバーの応答が受信されて処理される前にトリガーされます。どのように接続するサーバーとポートを設定します

procedure TForm1.UploadFiles; 
begin 
    try 
    IdFTP.Connect; 
    try 
     while (there is a file to upload) do 
     begin 
     if (directory is different than current) then 
      IdFTP.ChangeDir(directory); 
     IdFTP.Put(fileName, ExtractFileName(fileName)); 
     end; 
    finally 
     IdFTP.Disconnect; 
    end; 
    except 
    on E: Exception do 
     ShowMessage(E.Message); 
    end; 
end; 
+0

別の素晴らしい例。 Remy Leaeau aswel :)あなたのコメントはgreathと記載されています:) –

関連する問題