FB_Fileopen modus a: Daten werden nicht angehängt, sonder überschreiben die alten

alb

Level-1
Beiträge
68
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich beschäftige mich gerade damit Logfiles zu schreiben. Dazu habe ich folgendes kleines Testprogam geschrieben:
Code:
PROGRAM MAIN
VAR
    fopen:FB_FileOpen;
    fclose:FB_FileClose;
    fWrite:FB_FileWrite;

    Logfile:UINT;
    StringAdr:DWORD;
    Str:STRING;
    auf,zu,schreiben:BOOL:=FALSE;
END_VAR

IF auf THEN
fopen.sPathName:='c:/Daten/Logfiles/log6.txt';
fopen.nMode:=10;
fopen.bExecute:=TRUE;
fopen;
fopen.bBusy;
fopen.bError;

fopen.nErrId;

Logfile:=fopen.hFile;
ELSE
fopen.bExecute:=FALSE;
fopen;
END_IF

IF schreiben THEN
fwrite.bExecute:=FALSE;
fwrite;
Str:='test$R$N';
StringAdr:=ADR(Str);
fwrite.hFile:=LogFile;
fwrite.pWriteBuff:=StringAdr;
fwrite.cbWriteLen:=8;
fwrite.bExecute:=TRUE;
fwrite;
END_IF

IF zu THEN
fclose.hFile:=Logfile;
fclose.bExecute:=TRUE;
fclose;
fclose.bBusy;
fclose.bError;
fclose.nErrId;
fclose.sNetId;
ELSE
fclose.bExecute:=FALSE;
fclose;
END_IF
ich logge mich in die SPS ein, setze Auf=true, auf =false -> die Datei ist geöffnet.

Setze Schreiben auf true, warte kurz, dann auf false -> die Datei wird mit Zeilen vollgeschrieben in denen test steht.

Setze zu auf true, warten zu auf false -> datei wurde geschlossen.

Funktioniert, habe eine Textdatei in der ein Haufen Zeilen mit 'test' stehen.

Ich logge mich aus, ändere test in test2 und wiederhole den Vorgang. eigentlich sollten jetzt weitere Zeilen angehängt werden in denen tzest2 steht. klappt aber nicht, die ursprüglichen Zeilen wreden überschrieben und es steht überall test2. Was mach ich falsch?
nMode:=10, hex für A, sollte doch eigentlich anhängen.

danke im vorraus
 
Hallo,
ich beschäftige mich gerade damit Logfiles zu schreiben. Dazu habe ich folgendes kleines Testprogam geschrieben:
Code:
PROGRAM MAIN
VAR
    fopen:FB_FileOpen;
    fclose:FB_FileClose;
    fWrite:FB_FileWrite;

    Logfile:UINT;
    StringAdr:DWORD;
    Str:STRING;
    auf,zu,schreiben:BOOL:=FALSE;
END_VAR

IF auf THEN
fopen.sPathName:='c:/Daten/Logfiles/log6.txt';
fopen.nMode:=[COLOR=Red]a[/COLOR]; 
fopen.bExecute:=TRUE;
fopen;
fopen.bBusy;
fopen.bError;

fopen.nErrId;

Logfile:=fopen.hFile;
ELSE
fopen.bExecute:=FALSE;
fopen;
END_IF

IF schreiben THEN
fwrite.bExecute:=FALSE;
fwrite;
Str:='test$R$N';
StringAdr:=ADR(Str);
fwrite.hFile:=LogFile;
fwrite.pWriteBuff:=StringAdr;
fwrite.cbWriteLen:=8;
fwrite.bExecute:=TRUE;
fwrite;
END_IF

IF zu THEN
fclose.hFile:=Logfile;
fclose.bExecute:=TRUE;
fclose;
fclose.bBusy;
fclose.bError;
fclose.nErrId;
fclose.sNetId;
ELSE
fclose.bExecute:=FALSE;
fclose;
END_IF

Bin da nicht so fit, aber

'r' Öffnet die Datei nur zum Lesen und positioniert den Dateizeiger auf den Anfang der Datei.

'r+' Öffnet die Datei zum Lesen und Schreiben und setzt den Dateizeiger auf den Anfang der Datei.

'w+' Öffnet die Datei zum Lesen und Schreiben und setzt den Dateizeiger auf den Anfang der Datei sowie die Länge der Datei auf 0 Byte. Wenn die Datei nicht existiert, wird versucht sie anzulegen.
wie würdest du z.B "w+" dezimal eintragen?

Ich denke, da gehört hex "a" rein
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die Antwort. Habs inzwischen Hingekriegt.

nMode:=FOPEN_MODEAPPEND

Hatte den Knowledgebaseartikel nicht so ganz verstanden und gedacht FOPEN_MODEAPPENDwäreder Name des Modus und nicht der zu Übergebende Parameter. Schließlich ist nMode vom Typ Dword. FOPEN_MODEAPPEND ist also eine, irgendwo, definierte Konstante die den Richtigen DWORD-Wert enthält?

Egal, nicht so viel denken, machen was dasteht ;-)
 
Zurück
Oben