Dateinamen Hochzählen, also das nicht überschrieben wird
-
Schönen guten Abend zusammen, ich hätte früher geschrieben aber das Forum war wieder down (deutet wohl auf die starke Beliebtheit hin
), jedenfalls konnte ich die zeit gut nutzen und bei googel was zu suchen und dann feststellen zu müssen das ich nicht so wirklich was gefunden hab
Also zu meinem Problemchen
ich möchte gerne neue Dokumente erstellen die den gleichen Namen haben aber jeweils ne Nummer noch hinten dran also so wie bei Windows
Neu Textdokument.txt
Neu Textdokument (2).txt
Neu Textdokument (3).txt
....
ich hab jetzt mit googel gefunden das das am besten mit einer for schleife realisiert werden soll aber ich weis nicht wie ich jetzt die neue Datei erstelle und dann diese for schleife an den Dateinamen hänge.also das wäre hier der Ansatz der for schleife:
for (int i=0;i<=500;i++) { ... }
gibt es eine möglichkeit das er nicht bis 500 oder so hochzählt sonder bis unendlich?
ich hoffe man konnte mich einigermaßen gut verstehen :p
mfg
n0et
-
Hallo
aber ich weis nicht wie ich jetzt die neue Datei erstelle und dann diese for schleife an den Dateinamen hänge.
Das hängt ja erstmal davon ab, was du für Dateien mit welchen Klassen erstellen willst. Ich geh mal von normalen Textdateien aus, dann bietet sich TStringList an.
gibt es eine möglichkeit das er nicht bis 500 oder so hochzählt sonder bis unendlich?
Unendlich natürlich nicht, aber bis zur normalen Interger-Grenze (bei 4 Milliarden...) ist das nicht schwierig.
unsigned int index = 0; TStringList* file = new TStringList(); while (/* hier deine Abbruchbedinung*/) { file->Clear(); file->Add(...); // Datei fühlen file->SaveToFile("File_" + IntToStr(index) + ".txt"); // Dateinamen zusammensetzen index++; // zum nächsten Index } delete file;
bis bald
akari
-
n0et schrieb:
gibt es eine möglichkeit das er nicht bis 500 oder so hochzählt sonder bis unendlich?
hi namensvetter
du könntest sowas versuchen wenn's eine riesige zahl werden soll:// gibt nach jedem aufruf eine nummer aus, die um 1 hochgezählt wurde char *count (void) { static char number[] = "00000000000"; // können auch viel mehr nullen sein int l = strlen (number) - 1; increment_digit: number[l]++; if (number[l] > '9') { number[l] = '0'; l--; goto increment_digit; } return number; }
-
Hallo
@akari
das ist schon mal gut mit dem weiterzählen, aber ich wollte nicht das er die 500 Dateien auf einmal erstellt sondern das wenn man auf den Knopf klickt eine Datei erstellt wird aber vorher kontrollieren soll ob die Datei(en) vorhanden sind und dann eine neue erstellt und die Zahl dann hinten um eins erhöhthi namensvetter
Hi
also ich denke 4 Milliarden sollten mir ausreichenaber danke für die Hilfe euch beiden
-
Hallo
Du kannst mit FileExists prüfen, ob die Datei besteht und u.U. die Dateinummer erhöhen.
Oder Du speicherst die aktuelle Zahl der Dateien und kannst somit einfacher auf die Anzahl zugreifen.Gruss
-
So hab es mit FileExists versucht irgendwie aber es geht nicht so richtig, es funktioniert nur wenn File_0.txt vorhanden ist und wenn ich auf den Button klicke erstellt er mir wieder alle Dateien, kann mir einer sagen was ich da falsch gemacht hab?
unsigned int i = 0; TStringList* file = new TStringList(); if (FileExists("File_" + IntToStr(i) + ".txt")) { for (int i=0;i<=5;i++) { file->Add("Test"); file->SaveToFile("File_" + IntToStr(i) + ".txt"); } } delete file;
Bitte nicht hauen wenn der code bisschen doof is, ich bin noch ein noob
mfg
n0et
-
Hallo
Das von dir beschrieben Verhalten passt genau zu dem Code.
Vielleicht solltest du erstmal den Ablauf überdenken, den das Programm für deinen gewünschten Effekt machen muß. Hm, vielleicht sind Struktogramme für Anfänger doch ganz gut?bis bald
akari
-
Für das Verständnis wäre vielleicht eine while-Schleife besser:
int x = 0; bool DateiBesteht = true; while(DateiBesteht) { if(FileExists("File_" + IntToStr(x)) { // Datei besteht, also x erhöhen } else { DateiBesteht = false; // Abbruch der Schleife // Datei erstellen } }
-
So, nachdem ich den ganzen Sonntag damit verbracht hab das zum laufen zu kriegen geht es jetzt endlich
hier meine Lösung, könnt ja mal reinschauen und evtl Verbesserungsvorschläge geben
TStringList *count = new TStringList(); count->LoadFromFile("count.txt"); Edit1->Text = count->Strings[0]; i = StrToInt(Edit1->Text); i++; Edit1->Text=IntToStr(i); count->Clear(); count->Add(Edit1->Text); count->SaveToFile("count.txt"); delete count; TStringList *neu = new TStringList(); neu->Clear(); neu->SaveToFile("File_" + IntToStr(i) + ".txt"); delete neu;
die edit ist eigentlich nur da weil ich es nicht gleich geschafft hab den String in ein Integer um zu wandeln
mfg
n0et
-
Hallo
die edit ist eigentlich nur da weil ich es nicht gleich geschafft hab den String in ein Integer um zu wandeln
Warum nicht?
i = StrToInt(count->Strings[0]);
bis bald
akari
-
oder
i = count->Strings[0].ToInt();