File kann nicht mit fopen geöffnet werden
-
Hallo,
wie sage ich dem fopen() wo meine Datei liegt? Habe meine config.txt im gleichen Ordner wie die C Dateien. Er findet aber nichts
if( (fz = fopen("config.txt", "r")) == NULL) printf("config.txt not found\n");
auch es auch mit absolutem pfad versucht. Kein Erfolg.
-
Dieser Thread wurde von Moderator/in CStoll aus dem Forum C++ in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
JDHawk schrieb:
Habe meine config.txt im gleichen Ordner wie die C Dateien.
Entscheidend ist, in welchem Verzeichnis das Programm ausgeführt wird.
auch es auch mit absolutem pfad versucht
... und auch daran gedacht, die Backslashes zu verdoppeln?
-
JDHawk schrieb:
Hallo,
wie sage ich dem fopen() wo meine Datei liegt? Habe meine config.txt im gleichen Ordner wie die C Dateien. Er findet aber nichts
if( (fz = fopen("config.txt", "r")) == NULL) printf("config.txt not found\n");
auch es auch mit absolutem pfad versucht. Kein Erfolg.
bei absolutem pfad musst du statt "c:\irgendwas\config.txt" die \ verdoppeln, da
mit ihnen immer escapesequenzen eingeleitet werden. sieht dann so aus:
"c:\\irgendwas\\config.txt"mfg Gaste
-
Ja genau stimmt.
Wenn ich nach einem Zeichen in der Datei suche kann ich das so machen?
Weil er findet so das Zeichen nicht obwohl ich es drinne habeFILE *fz; char search = 'a'; char* datei = "C:\\Blabla\\Bla\\test\\config.txt"; /*open config.txt readonly and see if there is a specific character*/ if( (fz = fopen(datei, "r")) == NULL) { printf("%s not found\n", datei); return 0; /*false*/ } else { while(!feof(fz)) { if(fgetc(fz) == (int)search) { printf("Char %c found\n", search); /*close the file*/ fclose(fz); return (1); /*success*/ } if(ferror(fz)) { printf("Error reading the File: \n %s\n",datei); fclose(fz); return (0); /*false*/ } } printf("Char %c not found\n", search); fclose(fz); return(0); }
-
... if(fgetc(fz) == (int)search) <----- { printf("Char %c found\n", search); /*close the file*/ fclose(fz); return (1); /*success*/ } ...
Nimm da einfach mal den Cast weg, dann sollte es eigentlich funktionieren.
mFg
-
Hi,
und was wenn ich nun eine Zeichenfolge (einem String) in eine Datei hinzufügen möchte (append). wie würde man das am geschicktesten anstellen?
Klappt sowas?
int appendAnything(char* name, int number) { FILE *fz; char* datei = "C:\\Blaba\\bla\\test\\config.txt"; const char* my_ch, my_str; _itoa(number, my_ch, 10); my_str = strcat(my_ch, appl_name); /*open config.txt file with read and write rigths and append on end*/ if( (fz = fopen(datei, "a+")) == NULL) { printf("\t\config.txt not found\n"); return 0; } else { fputs(my_line, fz); fclose(fz); return (0); } }
-
Ok habe ich irgendwie hinbekommen.
Aber wie füge ich ein new line hinzu?
Oder vielleicht wäre es einfacher wenn ich alle Daten einfach nebeneinander habe.
-
Ok andere Frage:
wie kann ich nach einem String suchen?
Also nicht nur nach einem zeichen?Dann müsste ich doch mit fgets(buffer, 128, fz) 128 Zeichen einer Zeile in buffer einlesen, und dann in diesem buffer herumsuchen?
bin ich da auf dem richtigen Wege?
-
Ja, du bist auf dem richtigen Weg - zum Suchen kannst du z.B. strstr() verwenden.
(eventuell mußt du darauf achten, daß fgets() nur einen Teil deines Suchstrings erwischt haben könnte)
-
Ok finden kann ich das Wort in der Text-Datei.
Aber wie kann ich es löschen oder ersetzen.Perfekt wäre löschen und den rest der danach kommt wieder "concatenaten".
Würde mir aber auch ausreichen wenn es einfach mit Leerzeichen oder 0er überschrieben wird.ok mit fputs(char*, File*) kann man ja was reinschreiben.
Aber wie schreibe ich "0er" oder Leerzeichen rein, bzw. woher weis ich wo der Zeiger im File gerade schreibt?
Ok könnte ja die komplette Textdatei auslesen, bearbeiten und wieder reinschreiben. Aber was wenn ich nicht genügend Speicher dafür habe?
-
Überschreiben geht relativ einfach - schieb den Dateizeiger mit fseek() an die richtige Stelle (der steht hinter dem letzten Abschnitt, den du eingelesen hast - also mußt du nur noch den Offset vom Zeilen/Block-Ende zum gefundenen Wort bestimmen) und schreib dann strlen(wort) Zeichen in die Datei.
Löschen wird aufwendiger - dazu mußt du alles hinter der Löschposition nach vorne umkopieren, um die entstandene Lücke wieder aufzufüllen.
-
ok, wie kann ich eigentlich in einer Datei ein Return angeben?
wollte eine Tabelle schreiben so z.b.1
2
3
4
5
6und bei Bedarf z.b bei 3 etwas reinschreiben
1
2
3 Hallo
4
5
6