Moin Moin
Ich generiere mit meinem Programm eine inf Datei. Der Dateiname enthät eine KundenID das akt. Datum und die Anzahl an (Minuten/Tag)/2. Das klappt auch alles wunderbar. Nun sollen die Dateien aber noch zusätzöich mit einer laufenden Nr ausgestattet werden.
Vielleich hat jmd. von euch eine Idee wie das geht.
Lg
Hallo zecken81,
und wo ist dein Problem?
herbivore
Hey kennen uns ja schon 🙂
Das Problem ist:
StreamWriter schreiben = File.CreateText(Pfad1 + "" + filename + "" + filename2 +"_" + filename5);
Pfad1: ist der Pfad
filename ist das Datum
filename2 : Anzahl Minuten/tag/2
und filename5 ist die Endung also hier .*inf
und wie bekomme ich da jetzt noch eine laufende Nr ein
die erste erstellte datei soll 0001 sein die zweite 0002
Am Ende sol der Dateiname so aussehen
34300_20080528_333_0002.inf
und dieses 0002 macht mir Probleme
Hallo zecken81,
wenn ich dich richtig verstehe, ist dein Problem herauszufinden, welche die nächste freie Nummer ist, oder?
herbivore
Auch
Der Kunde bekommt das Programm und generiert Inf dateien, die dann wieder zu uns kommen und wir machen mit denen was.
Jede Nr darf aber nur einmal vorkommen also die laufende nr 0001 darf es nur einmal geben. Mein problem ist es herauszufinden, wie man das in den Dateinamen reinbekommt und nie wieder die laufende Nr verwendet auch wenn das Datum oder der Zeitstempel anders sind. Dies gilt allerdings nur für den Kunden mit der AuftragsID xxxxx der Kunde mit der AuftragsID yyyy darf die nr 0001 verwenden aber natürlich auch nur einmal
Hallo zecken81,
und das hätten wir alles aus deinem ersten Beitrag erahnen sollen?
So wie ich es verstehe ist kann es also sein, dass bereits erstelle Dateien gelöscht oder verschoben werden. Ich denke, dann wird dir nicht anderes übrig bleiben, als dir die nächste freie laufende Nummer (kunden- und auftragsbezogen) zu merken. Wenn das Programm ohnehin mit einer Datenbank arbeitet, dann am besten dort.
herbivore
du zählst einfach wieviele *.inf dateien in dem verzeichnis vorhanden sind und erhöhst diese zahl um 1 und nimmst sie einfach in den Dateinamen auf.
Hallo chavez,
was wird an zwei Punkten scheitern. Zum einen, wenn Datei gelöscht oder verschoben werden. Und es klingt ja so, als wäre das möglich oder zumindest nicht vollkommen auszuschließen. Und zu anderen daran, dass die laufende Nummerierung auftragsbezogen ist.
herbivore
zuerst holst du dir alle dateinamen mit hilfe der Directory klasse
dann splittest du jeden dateinamen nach jedem unterstrich
dann hast du die laufende nummer der jeweiligen datei wobei du dir die höchste merkst.
wenn du alle dateien durch hast, addierst du 1 zu der höchsten gemerken nummer und schon hast du eine neue nummer für die nächste datei.
wie du allerdings hier:
StreamWriter schreiben = File.CreateText(Pfad1 + "" + filename + "" + filename2 +"_" + filename5);
die neue laufende nummer hereinbekommst, kannst du :rtfm: nachlesen mit dem stichwort : string.Format(...)
was die unterteilung nach kunden und aufträgen anbelangt hast du noch keinerlei informationen hierzu gegeben aber ich bin mir sicher das du nach etwas nachdenken auch auf diese lösung kommen wirst.
Hallo JAck30lena,
nur wenn der Kunde letzte Datei löscht, wird beim nächsten Mal die gleiche Nummer vergeben. Und darauf was Kunden tun hat man nur begrenzt Einfluss.
herbivore
Ja genau aber das hört sich ja alles schonmal gut an
Werd mir mal ein paar Gedanken machen und es ausprobieren
Vielen Dank erstmal
Also wenn das ein verteiltes System ist (nach was es sich auch irgendwie anhört) dann müsste man den ganzen Vorgang auch noch mit ?anderen Filialien des Kunden? synchronisieren.
Hey Leute hab es hinbekommen
Danke für die Vielen tipps.
Gehe einfach davon aus, dass der Kunde die Dateien aus dem Ordner nicht löscht und zähle dann die Anzahl der Dateien.
Allerdings hab ich jetzt ein andere Problem. Die laufende Nr. muss fünfstellig sein.
Also z.B. 00001. Im Dateinamen steht aber immer nur 1. Die Nullen werden gelöscht. Kann man das irgendwie umgehen???
Danke
Da hab ich schon geschaut aber bei msdn werd ich nicht so richig schlau. Gibt es noch eine andere Quelle?
Was hat denn string.Format damit zu tun.
Klingt zwar gut, aber gefunden hab ich da auch nix.
Erweitere stattdessen deine Suche in der MSDN auf die string-Member PadLeft und PadRight. Das sollte dir weiterhelfen.
Ah ok irgendwie bin ich davon ausgegangen das ein String zugrunde liegt. Blödsinn eigentlich.
Bei den Überladungen von ToString bei int ist das dann ziemlich genau beschrieben, da haste Recht. Obgleich da "D4" statt "0000" vorgeschlagen wird.