Datei auf Server bearbeiten, Daten anfügen



  • Ich werde daraus nicht wirklich schlau.

    Ich benutze FileZilla....
    Eine *.txt-Datei auf den Server schicken funktioniert ja.
    Aber ist es möglich eine bestehende Datei zu bearbeiten schprich etwas anzuhänden?

    Mit

    fstream File("d: \test.txt", ios::out|ios::app);
    

    iso::app hängt man ja etwas am ende an, wass ich ja auch will.

    Wie kann ich herrausfinden ob mein FileZilla Server das kann? ich habe ja eingestellt read, write, delete, und append, all ich den Ordner erstellt habe.



  • Du verwechselst da lokale Filestreams und den FTP Stream.
    Dein (zu komplizierter) Ansatz holt erst die Textdatei lokal auf dein Handy, fügt eine Zeile hinzu und lädt sie dann wieder auf den FTP Server hoch.

    Dann ist es auch nicht die Frage, ob FileZilla das kann oder nicht, sondern welche API du für die Kommunikation benutzt, ob die das APPE Kommando unterstützt und wenn ja wie.

    Für mich sieht das nach den Indy Komponenten und Embarcadero RAD Studio aus. Die Komponente TidFTP bietet eine Überladung Methode Put an:

    void TIdFTP::Put( TIdStream* Source, String FileName, bool Append );
    

    Lösung:

    1. entsprechenden Stream erzeugen (TMemoryStream/TFileStream)
    2. Put aufrufen

    Edit:
    Typos und Grammatik



  • Ja es ist das Rad Studio 10.1 Berlin.

    Verstehe ich das richtig, das ich die Put Methode überschreiben muss??

    Da meines wissens nach, im Moment mit der Put methode nur eine vorhandene Datei an den Server geschickt werden kann?



  • berolld schrieb:

    Verstehe ich das richtig, das ich die Put Methode überschreiben muss??

    Da meines wissens nach, im Moment mit der Put methode nur eine vorhandene Datei an den Server geschickt werden kann?

    Nein. Es existiert bereits eine Überladung der Methode Put, um diese mit append zu nutzen.
    Du brauchst nur noch einen Stream des Typs TMemoryStream/TFileStream zu erstellen und diese überladene Methode

    DocShoe schrieb:

    void TIdFTP::Put( TIdStream* Source, String FileName, bool Append );
    

    verwenden.



  • Also ich habe mich mal durchgelesen.

    TFileStream erzeuge ich ja folgendermaßen:

    TFileStream *fStream = new TFileStream (c , ios::out| ios::app);
    //bzw.
    TFileStream *fStream = new TFileStream (c , fmOpenReadWrite);
    

    Unter c ist ja der Pfad gelegt, der geöffnet werden soll umd die Datei zu öffnen und reinzuschreiben.

    TMemoryStream dann so:

    TMemoryStream * mStream = new TMemoryStream();
    

    Mein mStream wird ja nur als temporärer Speicher genutzt, in die ich z.B. 2 Edits reinschreiben kann.
    Also z.B: Edit1 und Edit2

    Ich hoffe das ich auf dem Reichtigen weg bin, und weitere Tipps bekomme...



  • Damit keiner Denkt ich mache ncith und warte darauf das mir jemand die Antwort liefert, hab ich folgendes probiert:

    const char *fileContents = "Sein oder nicht sein, das ist hier die Frage.";
    const char *remoteFilename = "C:\\FTP\\test.txt";
    FTPClient->TransferType = ftASCII;
    FTPClient->Put(remoteFilename,fileContents, ios::app );
    

    Program führt aus aber sobald ich die sachen verschicke erhalte ich folgende Fehlermeldung:

    Datei C:\FTP\test.txt kann nicht geöffnet werden. Das System kann dan angegebenen Pfad nicht finden.



  • Ich seh da nirgendwo ein Stream Objekt,das du befüllst und an Put übergibst.
    Weniger raten oder probieren,mehr wissen was man tut.



  • Und der 'remoteFilename' kann auch nicht stimmen, denn FTP kennt keine Partitionen (und daher wohl auch die Fehlermeldung).



  • ...



  • DocShoe schrieb:

    Du verwechselst da lokale Filestreams und den FTP Stream.
    Dein (zu komplizierter) Ansatz holt erst die Textdatei lokal auf dein Handy, fügt eine Zeile hinzu und lädt sie dann wieder auf den FTP Server hoch.

    Dann ist es auch nicht die Frage, ob FileZilla das kann oder nicht, sondern welche API du für die Kommunikation benutzt, ob die das APPE Kommando unterstützt und wenn ja wie.

    Für mich sieht das nach den Indy Komponenten und Embarcadero RAD Studio aus. Die Komponente TidFTP bietet eine Überladung Methode Put an:

    void TIdFTP::Put( TIdStream* Source, String FileName, bool Append );
    

    Lösung:

    1. entsprechenden Stream erzeugen (TMemoryStream/TFileStream)
    2. Put aufrufen

    Edit:
    Typos und Grammatik

    Danke dir habe jetzt verstanden was du gemeint hast.
    Ich habe fstream und stream verwendet und siehe da es hat funktioniert....



  • berolld schrieb:

    Danke dir habe jetzt verstanden was du gemeint hast.
    Ich habe fstream und stream verwendet und siehe da es hat funktioniert....

    aber hauptsache erst mal flamen - nächstes mal denk zu erst nach und postest danach. sollte ja allgemein so sein; aber wenn man dann noch so nen post schreibt wie du (vor deinem edit), ists doppelt dämlich.


Anmelden zum Antworten