FileTransfer Problem :)



  • Hallo leute,

    mein problem: ich hab nen filetransfere geschrieben. funzt auch normal nur viel zu langsam. das kommt daher das ich aus der datei die zeichen einzeln auslese und in ein AnsiString packe und das alles dann über Server- bzw ClientSocket abschicke.

    es gibt ja die möglichkeit aus einer datei sagen wir mal einen ganzen block auszulesen. aber dann landen die daten in eine char[] variable und wenn ich die über mein socket verschicke kommt nicht alles an wegen der '\0'. naja auf jeden fall macht das so probleme.

    gibt es eine möglichkeit aus einer datei einen block in eine string einzulesen? oder gibt es eine möglichkeit die char variable in ein string zu packen inc. den NULLen.

    ich könnte zwar aus der char variable wieder zeichen für zeichen alles in die string variable kopieren. doch dann hab ich probleme beim ende einer datei. wenn ich 1000 kb auslesen will die datei am ende nur noch 39 kb hat. dann hab ich eine char variable wo ich nicht genau weiss wo das ende ist. es sei denn ich rechne immer alles aus ... naja ich hoffe ihr könnt verstehen was ich genau meine. vielleicht geht das ganze ja noch viel einfacher als das was ich hier mache.

    danke schon mal für eure hilfe 😉



  • Geht alles. Vermute bei dir liegt mehr ein konzeptionelles Problem vor. Eine char Varaible ist (aus meiner Sicht) nicht geeignet Daten aufzunehmen. Man kann es natürlich tun hat dann aber Probleme (\0, sigend oder unsigend, usw.) Der bessere Weg ist einen Speicherbereich zu reservieren und mit einem Zeiger auf diesen Bereich zu arbeiten. Wie man das macht -> da gibt es verschiedene Wege. Recht einfach ist

    SysGetMem
    SysReallocMem
    SysFreeMem

    Eine andere Frage ist, wenn du Dateien runterladen?? willst, ob ev. FTP in Frage kommt.



  • ja ich möchte mein eigenes filetransfer schreiben mit eigenem protokol usw.. 🙂 spielereien halt.

    ja das mit dem mem klingt gut aber ich kenne nur die methode von einer datei etwas in eine char variable zu lesen. ich glaub ich muss mal rumtesten irgendwie muss es ja gehen. 😉





  • Spawni schrieb:

    ich könnte zwar aus der char variable wieder zeichen für zeichen alles in die string variable kopieren. doch dann hab ich probleme beim ende einer datei. wenn ich 1000 kb auslesen will die datei am ende nur noch 39 kb hat. dann hab ich eine char variable wo ich nicht genau weiss wo das ende ist. es sei denn ich rechne immer alles aus ... naja ich hoffe ihr könnt verstehen was ich genau meine. vielleicht geht das ganze ja noch viel einfacher als das was ich hier mache.

    Hi,
    das sollte eigentlich dein Protokoll regeln. Also eigentlich sollte da sowas kommen wie: "Hallo ich sende gleich 39kB Daten!" oder so 😉

    MfG

    Alexander Sulfrian



  • Ahja: Ausserdem sind Stringfunktionen u.ä. ausgesprochen schlecht für das Handling binärer Daten...



  • Spawni schrieb:

    [...]
    vielleicht geht das ganze ja noch viel einfacher als das was ich hier mache.
    [..]

    Am einfachsten->FTP-Komponente
    Nicht ganz so einfach-> Indy-Komponenten->TIdTCPClient->Write/Read Stream
    Am schwierigsten->Eigenes Protokoll


Anmelden zum Antworten