For - Schleife + Copy Befehl => Programm hängt sich auf
-
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 dasprintf
vorsystem
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 statusGrüß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.
-
Hier ein Link zu CopyFile:
http://www.c-plusplus.net/forum/viewtopic-var-p-is-1687038.htmlsiehe auch MSDN:
http://msdn.microsoft.com/en-us/library/aa365522(VS.85).aspx
-
Beide Links haben mir nicht weitergeholfen,
da ich weder in Cpp programmiere, noch aus der MSDN
Seite klug werde.Grüße.
-
Guckst du noch einmal Formatstring an, sind zwei Fehler drin.
-
sleep kannnste weglassen