Datei aus C Programm beschreiben

Gast #2794894
Lesenswert?

Hallo

Ich möchte aus einem C Programm Daten in eine Datei schreiben. Das 
Schreiben auf die Datei funktioniert schon. Allerdings möchte ich die 
Strings die geschrieben werden, mit Leerzeichen und TAB`s noch 
formatieren. Das funktioniert leider überhaupt nicht. Sobald ich ein 
Leerzeichen in den String einfüge, wird dieser beim nächsten Zugriff auf 
die Datei ab diesem Leerzeichen wieder überschrieb (ein Problem mit der 
0 Terminierung!?). Andere Zeichen wie der horizontale Tabulator werden 
gar nicht eingefügt... Habt ihr mir hier einen Tipp wie ich das in 
meinen Code rein bekomme?
1
void export_clicked(GtkWidget *widget, gpointer data)
2
{
3
  FILE * fd;
4
  int length = 0;
5
  char buf[80];
6
  char buffer[5000];
7
  struct stat attribut;
8

9
  length = sprintf(buf, "Temperatur:%s+%d°C\n\r", 0x32, temperature);
10

11
//starting the file operation
12

13
  stat(FILENAME, &attribut);  
14
  fd = fopen(FILENAME , "r+");
15
  if (fd == NULL)
16
  {
17
    //unable to open file.
18
    printf("open_file: Unable to open %s", FILENAME);
19
  }
20
  printf("buf: %s", buf);  
21
  fscanf(fd, "%s", buffer);
22
  printf("string: %s\n", buffer);
23
  fprintf(fd,"%s", buf);
24
  fclose(fd);
25

26
}
Gast #2794935
Lesenswert?

Hallo smarty

Danke, das ist mir auch gerade aufgefallen. Aber ändern tut das 
irgendwie nichts.
Die Funktion wird bei jedem Tastendruck (ist ein gtk Programm) 
aufgerufen. Ich habe irgendwie das Gefühl dass das Schreiben auf die 
Datei nicht am Ende ausgeführt wird, sondern ab dem ersten Leerzeichen 
innerhalb der Datei. Wie kann ich das umgehen?

Gruß

Bean
Gast #2794942
Lesenswert?

Mr Bean schrieb:
> Die Funktion wird bei jedem Tastendruck (ist ein gtk Programm)
> aufgerufen. Ich habe irgendwie das Gefühl dass das Schreiben auf die
> Datei nicht am Ende ausgeführt wird, sondern ab dem ersten Leerzeichen
> innerhalb der Datei. Wie kann ich das umgehen?

du öffnest du datei auch mit

r+

damit steht meines wissens der Zeiger an anfang, du willst aber daten 
anhängen. Dafür verwendet man: a+.

http://www.cplusplus.com/reference/clibrary/cstdio/fopen/

und eine Datei ständig zu öffenn un zu schließen ist keine so gute Idee.
Gast #2794949
Lesenswert?

Hallo Peter

Vielen Dank für den Tipp! Da lag das Problem. Da bin ich irgendwie nicht 
drauf gekommen dass es auch am Öffnen der Datei liegen kann. Dachte 
immer mit dem Zusammensetzen des Strings wäre was Falsch.
Im normalen Betrieb der Applikation wird es nicht oft vorkommen dass die 
Datei geöffnet/beschrieben wird. Ich schätze die Datei wird vielleicht 
alle 10 Minuten beschrieben.
Trotzdem würde es mich freuen wenn Du mit ein exemplarisches Beispiel 
hast wie man das sonst macht.

Gruß

Bean
Gast #2794953
Lesenswert?

Mr Bean schrieb:
> Datei geöffnet/beschrieben wird. Ich schätze die Datei wird vielleicht
> alle 10 Minuten beschrieben.
dann ist es ok.

> Trotzdem würde es mich freuen wenn Du mit ein exemplarisches Beispiel
> hast wie man das sonst macht.
einfach einmal öffnen und die Datei offen lassen, du musst dafür das 
filehandel global in der klasse anlegen. Dann darf man nur nicht 
vergessen bei beendet die Datei zu schließen.
Gast #2794962
Lesenswert?

Ah ok. Das mit dem global Anlegen der Datei wäre natürlich eine 
Möglichkeit. Dann könnte ich die Datei beim Verlassen der Applikation 
auch an einer anderen Stelle schließen.
Aber naja, im Moment funktioniert es erst mal so.

Danke nochmal

Gruß

Bean

PS.: Ich glaube dieser Thread ist ein Beispiel dafür dass es in diesem 
Forum auch noch Threads gibt in denen einem wirklich weiter geholfen 
wird...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren