Hallo, ich habe mal wieder ein Problem mit FatFs. Und zwar möchte ich in eine Datei schreiben, diese schließen und wieder erneut hineinschreiben. Die sollte aber immer am Ende der Datei passieren das keine Daten verloren gehen. Da ich mit FatFs nur die Möglichkeit habe Dateien ab der Stelle 0 zu Überschreiben geht dies nur mit f_lseek. Komme jedoch mit dieser Funktion überhaupt nicht zurecht. Sie sollte mir eigentlich den Lese Schreibe Zeiger zur letzten Stelle verschieben damit ich hier weiterschreiben kann. Tut sie jedoch nicht. Meine Funktion sieht bis jetzt so aus:
1 | void logger(void) |
2 | {
|
3 | FATFS fatfs; /* Work area (file system object) for drives |
4 | FRESULT rc; /* FatFs function common result code */
|
5 | FIL data; /* data file */ |
6 | UINT tw; |
7 | |
8 | f_mount(0, &fatfs); // Register Workspace |
9 | |
10 | rc = f_open(&data, "data.txt", FA_WRITE | FA_CREATE_ALWAYS); |
11 | if (rc) |
12 | {
|
13 | die(rc); |
14 | }
|
15 | |
16 | // Pointer to EOF
|
17 | |
18 | rc = f_lseek(&data, sizeof(data)); |
19 | if (rc) |
20 | {
|
21 | die(rc); |
22 | }
|
23 | |
24 | // CAM WRITE
|
25 | |
26 | rc = f_write(&data, cma, 2, &tw); |
27 | if (rc) |
28 | {
|
29 | die(rc); |
30 | }
|
31 | |
32 | rc = f_write(&data, "\r\n", 2, &tw); |
33 | if (rc) |
34 | {
|
35 | die(rc); |
36 | }
|
37 | |
38 | f_close(&data); |
39 | f_mount(0, NULL); |
40 | ClearTempData(); |
41 | |
42 | }
|
Es funktioniert aber nicht. Die Text-Datei besitzt am Anfang ein paar Leerzeichen jedoch wird mein Wert immer wieder aufs neue Überschrieben! Hat jemand eine Idee? Vielen Dank im Vorraus!