Forum: Mikrocontroller und Digitale Elektronik MSP430 FatFs f_lseek


von Hans-Jörg (Gast)


Lesenswert?

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!

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

ich habe keine Ahnung, welche Software du verwendest, aber Unix lseek 
verhält sich anders, ausserdem ist sizeof (data) möglicherweise auch 
falsch. Für lseek gibt es Konstanten, u.a. SEEK_END, der Aufruf lseek 
(@data,0,SEEK_END) positioniert ans Ende. RTFM.

Gruss Reinhard

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

noch dazu: sizeof (data) ist die Grösse der Struktur FIL, nicht der 
Datei.

Gruss Reinhard

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.