Logfiler

piätch

Grünschnabel
Hallo,
also ich soll für die Schule nun einen Logfiler schreiben der Logdateien erzeugt desweitere soll er folgende Kriterien erfüllen :

-Wenn in einer Logdatei 10 Einträge vorhanden sind soll eine neu Logdatei angelegt werden.
-Wenn 15 Logdateien erstellt worden sind so soll dann die älteste gelöscht werden.

das mit den Maximalen Einträgen habe ich schon gelöst :) nun zu meinen eigentlichen Problem wenn ja an einen Tag mehr als 10 Zugriffe geschehen so soll eine neue Datei erstellt werden, diese Datei erhällt dann den Namen 2010-09-22_1.txt. Dadurch will ich sicherstellen das ich immer in die letzte Datei schreiben werde...
Nun wollte ich prüfen wie der letzte Dateiname ist und dafür schrieb ich mir folgenden Code:
Code:
char erwend[]="1";
while(datei){

   strcat(stringerw,"_");
   strcat(stringerw,erwend);
   strcat(stringerw,".txt"); //add .txt to string
   datei.open(stringerw,ios_base::in|ios_base::app);
   cout<<"\nDatei:"<<stringerw<<" kann geoeffnet werden\n";
   erwend[0]++;
   datei.close();
}
cout<<"Datei:"<<stringerw<<" kann nicht geoeffnet werden";

So nun habe ich in den Ordner in den die Logdateien geschrieben werden ein paar textdateien geschrieben:

2010-09-22
2010-09-22_1
2010-09-22_2
2010-09-22_3

nur leider bekomme ich dann nur die Ausgabe:

Datei:2010-09-22_1.txt kann geoeffnet werden
Datei:2010-09-22_1.txt kann nicht geoeffnet werden

Also läuft die Schleife garnicht komplett durch :-( wo liegt nun mein Fehler****?

Ich denke das muss ja irgendwas mit der Logik sein in der Schleife aber ich komme einfach nicht drauf:(

gruß piatch
 
Hi.

Matthias hat recht.

Wenn du datei.close() aufrufst, dann ist die Datei geschlossen und du kannst weder etwas von dem Stream einlesen noch etwas ausgeben. Der Stream Zustand ist jedenfalls nicht good().

C++:
::std::ifstream file;

do {
  file.close();
  file.clear();
  ...
  file.open(dateiname);
} while (file.is_open());
Gruß
 
Zuletzt bearbeitet:
Dieser code ist auch nicht dazu da um etwas aus der Datei zu lesen. Der Code dient allein dazu um herauszufinden wie hoch die Endung ist also:
_1
_2
_3
u.s.w.

Dadurch will ich dann sicherstellen das ich nachher die richtige Datei zum lesen und schreiben öffne und nicht eine die ich vorher schon erstellt habe, da das ja nicht klappt da in jeder Datei nur 10 Einträge seien dürfen :(
Aber ich werde eure Vorschläge mal in die Tat umsetzen und ausprobieren ;)
Schonmal besten dank für die schnelle hilfe!
Gruß Piatch
 
Okee habe nun ein bisschen rumprobiert leider weiterhin ohne erfolg!:(

Also habe das datei.close() rausgenommen, leider ohne erfolg , dann habe ich es mit einer for-schleife probiert einfach mal alle dateien ausprobieren und dann mit

if(datei.good()) cout<<"Ok";

getestet leider auch ohne erfolg :(
gibt es da nicht noch eine andere möglichkeit den Dateiindex auszulesen?

Mit kamm nun auch in den Kopf das mit der Zeit zu regeln wann die Datei zuletzt bearbeitet wurde, nur da habe ich nun erst recht keine ahnung wie ich das machen soll :(

Gruß
 
Okee habe nun ein bisschen rumprobiert leider weiterhin ohne erfolg!:(

Also habe das datei.close() rausgenommen, leider ohne erfolg , dann habe ich es mit einer for-schleife probiert einfach mal alle dateien ausprobieren und dann mit

if(datei.good()) cout<<"Ok";

getestet leider auch ohne erfolg :(
Ich habe dir doch bereits eine Möglichkeit aufgezeigt. Meine Schleife läuft solange bis eine Datei nicht geöffnet werden konnte. Das ist doch genau das was du wolltest, oder?

Gruß

PS: es gibt auch eine direkte Methode festzustellen ob eine Datei existiert: http://msdn.microsoft.com/en-us/library/1w06ktdy(v=VS.71).aspx
 
Zuletzt bearbeitet:
Zurück