Forum: Mikrocontroller und Digitale Elektronik SD Karte "append to file?" Library von Roland Riegel


von Georg T. (microschorsch)


Lesenswert?

Hallo zusammen,

ich mache gerade meine ersten Erfahrungen mit der Library von Roland 
Riegel.

Ich möchte die einen Datenlogger bauen, dafür würde ich gerne an eine 
bestehende Datei einen pro Aufruf einen Datensatz anhängen. Im Prinzip 
suche sich das Pandon zum ">>" Streaming Oparator in der bash.

Momentan kann sieht mein (noch recht primitiver) Code so aus:
1
  sd_raw_init();
2
  struct partition_struct* partition = partition_open(sd_raw_read, sd_raw_read_interval, sd_raw_write, sd_raw_write_interval, 0);
3
  struct fat_fs_struct* fs = fat_open(partition);
4
5
  struct fat_dir_entry_struct directory;
6
  fat_get_dir_entry_of_path(fs, "/", &directory);
7
  struct fat_dir_struct* dd = fat_open_dir(fs, &directory);
8
9
  const char filename[10] = {'D', 'A', 'T', 'A', '.', 'T', 'X', 'T'};
10
  /*
11
  fat_create_file(dd, filename, &directory);
12
  struct fat_file_struct* filehandle;
13
  filehandle = fat_open_file(fs, &directory);
14
  char sdbuffer[6] = "huhu";
15
  fat_write_file(filehandle, sdbuffer, 4);
16
  */
17
18
  struct fat_file_struct* filehandle = open_file_in_dir(fs, dd, filename);
19
  char sdbuffer[6] = "bubu";
20
  fat_write_file(filehandle, sdbuffer, 4);
21
  sd_raw_sync();


Die Karte und der Code funktioniert im prinzip, ich kann entweder eine 
neue Datei "DATA.TXT" anlegen und "huhu" reinschreiben, oder in eine 
exisitierende Date "bubu" schreiben. Leider entspricht das Verhalten dem 
">" Operator (der Inhalt der Datei wird gelöscht und dann neu 
beschrieben).

Gibts da n Trick? Ich bin sicher nicht der erste, der "appenden" 
möchte...

Gruß und Danke
Schorsch

von grammarnazi (Gast)


Lesenswert?

>Pandon

Pendant!

SCNR

von Georg T. (microschorsch)


Lesenswert?

Sprächen alle Franzosen C++ hätten wir das Problem nicht :-p

von Georg T. (microschorsch)


Lesenswert?

Habs selbst herausbekommen:
1
  struct fat_file_struct* filehandle = open_file_in_dir(fs, dd, filename);
2
  int32_t offset = 0;
3
  fat_seek_file(filehandle, &offset, FAT_SEEK_END);
4
  char sdbuffer[6] = "bubu";
5
  fat_write_file(filehandle, sdbuffer, 4);
6
  sd_raw_sync();

das "fat_seek_file" verändert "filehandle". Durch die Benennung 
FAT_SEEK_END wird explizit das Ende der Datei "aufgesucht". Danach 
entspricht, so wie ich das verstehe der "fat_write_file" Befehl einem 
append

Gruß Schorsch

von Wolfgang (Gast)


Lesenswert?

Georg T. schrieb:
> das "fat_seek_file" verändert "filehandle". Durch die Benennung
> FAT_SEEK_END wird explizit das Ende der Datei "aufgesucht".

Deine Formulierungen sind etwas "eigenwillig".
filehandle ist ein Pointer auf eine fat_file_struct. An dem Pointer 
wird gar nichts verändert.
Das Argument FAT_SEEK_END für das Positionierkommando fat_seek_file 
sagt, das sich der Offset (=0), auf den im Kommando verwiesen wird, auf 
das Fileende bezieht.
http://www.roland-riegel.de/sd-reader/doc/group__fat__file.html#gad4c305cf004bae9bea48730ed20c87ec

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.