Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Datei per FTP hochladen (https://www.delphipraxis.net/148689-datei-per-ftp-hochladen.html)

Sir Rufo 7. Mär 2010 00:38

Re: Datei per FTP hochladen
 
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:

Zitat von zod1ac
Ja genau, das hab ich mir auch gedacht, wie kann ich herausfinden, WO genau ich denn Schreibrechte habe und wo nicht?

Also dieser Befehl schafft Abhilfe?


Edit: Ich hab grad einiges über Special Folders gelesen und das scheint ja eine richtig komplizierte Sache zu werden. Gibts denn nichts anderes? Also gibts keinen Platz auf dem es im Normalfall Schreibrecht gibt?

lg

Die Special Folders sagen dir noch nicht, ob du da Schreibrechte hast.
Du bekommst nur die Pfadangaben geliefert.

Bei einigen Pfaden kann man aber davon ausgehen, dass der aktuelle Benutzer dort Schreibrechte haben sollte, sonst könnte der nämlich nicht vernünftig arbeiten :mrgreen:

Kompliziert ist das nicht wirklich ... dafür gibt es fertige Units womit man das auslesen kann.
Die Jedi's haben da einiges im Programm.

Ich habe dir mal eine Unit angehängt, die diese Special Folders mit einfachen Befehlen erschlägt :mrgreen:
Zudem ist in der Unit auch eine Funktion, die dir die Rechte in dem Verzeichnis oder an einer Datei zurückliefert.

Eine Demo ist auch dabei, da werden alle Special Folders aufgelistet inkl. der Rechte.

zod1ac 7. Mär 2010 00:53

Re: Datei per FTP hochladen
 
Vielen Dank dafür erstma, doch wie genau binde ich das nun in meinen Quelltext ein?
Also was genau muss ich denn jetzt machen? Habs jetzt soweit verstanden, dass SpecialFolders mir die Ordner anzeigt, die Schreibrecht haben usw.

Doch was nun? Wie genau bau ich das nun ein?

Sir Rufo 7. Mär 2010 01:29

Re: Datei per FTP hochladen
 
z.B. so (ich habe mal die schönen Eigenheiten der Unit hier benutzt :mrgreen: )
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdExplicitTLSClientServerBase, IdFTP, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    IdFTP1: TidFTP;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations } 
  public
    { Public declarations } 
  end;

var
  Form1: TForm1;

implementation

uses

  // Unit einbinden

  uSpecialFolders;

{$R *.dfm} 

procedure TForm1.Button1Click(Sender: TObject);
var sl:TStrings;
begin

  // Temporäres Verzeichnis für diese App erstellen

  if
    ForceDirectories( ResolveSFVars( '{appdatatemp}' ) )
  then
    begin
      sl := TStringList.Create;
      try
        sl.Add(Edit1.text);
        sl.Add(Edit2.text);
        sl.SaveToFile( ResolveSFVars( '{appdatatemp}\text.txt' ) );
      finally
        sl.Free;
      end;
     
      with IdFTP1 do
        begin
          Host :='kidgudi.ki.funpic.de';
          Username := 'kidgudi';
          Password := '*****';
          Passive := true;
          Connect;
          Put( ResolveSFVars( '{appdatatemp}\text.txt' ), 'text.txt', true);
          Disconnect;
        end;

      // Temporäres Verzeichnis aufräumen und löschen
      DeleteAndEmptyDir( '{appdatatemp}' );

    end
  else
    ShowMessage( 'Temporäres Verzeichnis konnte nicht erstellt werden!' );
end;

end.

zod1ac 7. Mär 2010 02:04

Re: Datei per FTP hochladen
 
Oke um die Unit uSpecialFolders einzubinden, muss sie sich im gleichen Ordner befinden, wie die normale Unit1 auch? Oder ist das egal?

Also habs soweit miteinbezogen, doch nun kommt die Fehlermeldung:

Exception class EIdReplyRFCError with message 'text.txt: Append/Restart not permitted, try again'.

Was nun? =(


Update:

Fehlermeldung scheint weg zu sein, funktioniert alles einwandfrei. Danke ;)

JDouble 18. Mär 2010 16:51

Re: Datei per FTP hochladen
 
Hallo

Ich versuche mit der TIdFTP-Komponente via Put einige größere Dateien hochzuladen.
Das heißt ich führe den Connect durch und rufe anschließend in einer Schleife mehrmals hintereinander Put auf.

Leider kommt es dann immer mal wieder vor, dass die Verbindung unterbrochen wird.
Bei der Protokollierung über das OnStatus-Ereignis erhalte ich dann als Meldungstext "Disconnected".

Wie geht man in so einem Fall am besten vor ?
Kann man einfach erneut Connect aufrufen (innerhalb der OnStatus-Behandlung) ?

Oder wie macht ihr das ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:04 Uhr.
Seite 4 von 4   « Erste     234   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz