Daten über Netzwerk holen





  • Habe erst zu spät gesehen, dass der gepostete Link auch den gleichen Tipp beinhaltete.

    Glaub mir, du willst diese Funktion benutzen.

    CopyFile überträgt nur 1 Datei. Es liegt jetzt dann also an dir, alle Dateien in diesem Verzeichnis zu suchen, zu erfassen und nacheinander zu kopieren. Dazu gibt es FindFirst und FindNext.

    Allerdings -> wieso einfach, wenn es auch umständlich geht



  • Danke für den Link.
    Ich habe jetzt folgenden Quellcode auf einem Button gelegt:

    if(!MoveFiles("d:\\test", "e:\\temp"))
      ShowMessage("Ausführung erfolgreich !");
    else ShowMessage("Fehler aufgetreten !");
    

    Bei mir kommt immer die Meldung "Ausführung erfolgreich". Doch leider wurden keine Dateien verschoben/kopiert, liegt es vielleicht daran das ich das selbe Laufwerk verwende (c:)? Oder habe ich noch etwas vergessen?



  • Versuchs mal mit

    MoveFiles("d:\\test\\*.*", "e:\\temp\\*.*")
    


  • Geht leider auch nicht. Dazu kommt noch wenn ich MoveFiles schreibe dann bekomme ich eine Fehlermeldung bei deklarieren (undifinierte Funktion 'MoveFiles') wenn ich das s wegmache, also MoveFile, dann geht es!



  • hä?



  • @jule0802
    Hast du die Funktion aus Christians Link denn auch drin?
    MoveFile ist wieder eine API-Funktion, die auch wieder nur eine Datei verschiebt.
    Nimm bitte die Funktion aus meinem (FAQ) oder Christians Link, deklariere und definiere sie und das wird schon gehen.
    Ansosnten wäre es hilfreich wenn du etwas mehr Quelltext poste würdest.



  • Sorry, ich denke ich habe mich falsch ausgedrückt und man hat meinen letzten eitrag falsch verstanden. Wenn ich das s wegmache also MoveFile, dann deklariert c++ das Programm ohne Fehlermeldung, aber das Programm selbst funktioniert nicht. Kann nicht jemand mal ein Beispielquellcode posten der bei ihm funktioniert? Wäre echt super nett.



  • Anders rum. Poste du etwas mehr Code. In den angegebenen Links steht alles was du brauchst. Du mußt es aber auch verwenden.



  • oben steht doch mein ganzer Quelltext, und dieser liegt wie schon gesagt auf einem Button, aber hier noch einmal:

    if(!MoveFiles("d:\\test", "e:\\temp")) 
      ShowMessage("Ausführung erfolgreich !"); 
    else ShowMessage("Fehler aufgetreten !");
    

    Ich denke das da ja noch was fehlen muss. Denn wie gesagt, wenn ich das ganze deklariere kommt der Fehler "Undifinierte Funktion 'MoveFiles'. Muss ich vielleicht noch etwas in die header schreiben?



  • Noch mal.
    Hast du die Funktion MoveFiles, wie im Link beschrieben in dein Programm eingefügt? Das ist keine Standardfunktion, weder bei Borland, noch bei Microsoft.
    Ums nochmal deutlich zu machen.
    In deiner cpp sollte etwa sowas noch stehen.

    int MoveFiles(AnsiString slSourceDir, AnsiString slTargetDir)
    {
      SHFILEOPSTRUCT sh;
      ZeroMemory(&sh, sizeof(sh));
      sh.hwnd = NULL;
      sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT | FOF_FILESONLY;
      sh.wFunc = FO_MOVE;                  // Durchzuführende Operation
    
      slSourceDir+='\0'; // doppelte Nullterminierung
                   // erforderlich !
      sh.pFrom = slSourceDir.c_str();
    
      slTargetDir+='\0';                   // doppelte Nullterminierung
                                           // erforderlich !
      sh.pTo    = slTargetDir.c_str();
    
      sh.hNameMappings = NULL;
      sh.lpszProgressTitle = NULL;
      return SHFileOperation (&sh);         // Aktion durchführen
    }
    //---------------------------------------------------------------------------
    


  • Also es geht jetzt, vielen Dank an alle.

    Nun habe ich aber trotzdem noch ein kleine Problem. Wenn das Programm die Daten überträgt dann kann ich nichts mehr in dem Programm machen, es ist wie als wäre es abgestürzt (ist es aber nicht). Wenn die Daten übertragen wurden dann geht wieder alles ganz normal. Das ganze liegt aber nicht an meinem prozesser der zu langsam ist, denn die Prozessorauslastung liegt bei 20 bis 30%. Wie mache ich es also das die Übertragung nicht meine ganze Auslastung von dem Programm "frist"?



  • Hallo,

    Das Programm arbeitet halt erst weiter, wenn deine Funktion beendet ist.
    Lagere deine Funktion in einen Thread aus. Dann müsste es gehen. Siehe dazu in die Hilfe zu TThread.

    Ciao



  • Hallo

    in deinem Fall das Kopieren in einen Extra-Thread auslagern.

    bis bald
    akari



  • Danke, habs gefunden. Konnte aber leider nicht herausfinden wie ich mein Thread ausführe. Also wie führe ich mein Thread aus wenn z.B mein Thread "Test" heißt???

    Danke



  • Hallo

    Schau dir TThread::Execute() an.
    Außerdem gibt es ein Beispiel unter <BCB-Path>Examples\Apps\Threads

    bis bald
    akari



  • Also ich habe mir beides angeschaut aber ich konnte es nicht finden. Vielleicht stelle ich mich auch einfach nur etwas zu blöd an. In der Hilfe stand was von "Create", damit bin ich aber auch nicht weiter gekommen. Also noch einmal die Bitte an euch.
    Wenn ich ein Thread mit dem Namen "Test" habe und möchte das es durch einen klick auf einen Button aktiviert wird, wie schreibe ich den Quelltext um dieses Thread auszuführen.

    DANKE



  • Normalerweise startet der Thread mit der Erstellung automatisch, solange Du ihn nicht explizit 'suspended' erzeugst. Dann hilft ein TThread::Resume().

    Zeig uns lieber mal, wie Du den Thread erstellst.



  • Was meinst du mit erstellen. Ich gehe auf Datei->Neu->Thread-Objekt und in dem Unit das sich dann erstllt schreibe ich meinen Quelltext rein. Und nun möchte ich dieses Thread bzw. diesen Quelltext ausführen.



  • Hallo

    dann must du noch eine Instanz dieser Thread-Klasse deklarieren und erstellen. Und der Konstruktor der Thread-Klasse hat den Parameter Suspended, wie Joe_M bereits gesagt hat.
    Eventuell ist es für dich erstmal notwendig, dich mit den Grundlagen von Standard-OOP zu beschäftigen, bevor du mit Threads herumeierst.

    bis bald
    akari


Anmelden zum Antworten