C# DateiEndung kürzen?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Ich hab's nicht ganz verstanden, aber wenn du mit Pfadangaben arbeiten möchtest, verwende bitte die IO.Path-Methoden, z.B. GetExtension oder GetFileNameWithoutExtension, statt selbst damit rumzupfrimeln

Woher ich das weiß:Studium / Ausbildung – Datenverarbeitungs-Kfm, Hobby- und Profi-Programmierer
Tastaturbrix 
Fragesteller
 31.08.2019, 16:45

Es gibt mir einen String aus.
Beispiel:

string irgendwas = "abc.txt";

was ich brauche ist "abc" ohne die endung.

Ich weiß ich könnte es mittels Cut bearbeiten und es in String Arrays packen, aber das würde nicht gehen, da dateifluss zu hoch ist.
Brauche eine Methode die es nicht in Arrays packt

0
Tastaturbrix 
Fragesteller
 31.08.2019, 17:13
@DonkeyShot

Stimmt danke...^^

Kommt aber nun eine => System.ArgumentOutOfRangeException: "StartIndex darf nicht kleiner als Null sein. Parametername: startIndex"

Problem konnte aber behoben werden durch =>
Console.WriteLine(a.Substring(Math.Max(0, (a.Length -11))));

0
regex9  31.08.2019, 17:26
@Tastaturbrix

Wenn ich mir deinen Code genauer anschaue, gibt es einige Punkte, die seltsam erscheinen.

  • Was hat diese Konstante (11) im Code verloren?
  • Wieso verwendest du in SearchFile ein if-else if, wenn es doch für den Vergleich zwischen item und DateiName nur zwei mögliche Rückgabewerte gibt?
  • Wieso sind deine Bezeichner manchmal deutsch, manchmal englisch?
  • Wieso ist SearchFile statisch, wenn es doch an einem Property hängt, welches sich eindeutig je Anwendungsfall unterscheiden kann?
1
regex9  31.08.2019, 17:56
@Tastaturbrix

Der angemerkte Teil bezieht sich nur auf Code von dir.

Ja, genau, diese 11 ist gemeint. Deine Funktion sollte nach Möglichkeit nicht von konstanten Werten abhängig sein, die allgemein gesehen flexibel im Wert sein könnten.

0
Tastaturbrix 
Fragesteller
 31.08.2019, 18:06
@regex9

Also mit der 11 sag ich dem ich möchte nur die letzten 11 Zeichen der ausgabe.
Die Ausgabe sieht zum beispiel folgendermaßen aus:

=> " D:\Ordner\Ordner\Ordner\Ordner\142325F.txt
Durch -11 bekomme ich die letzten 11 ziffern
=> 142325F.txt

Ich wollte noch die Endung weglassen das habe ich nun auch hinbekommen mittels ( auch von dir geposteter Lösung) GetFileNameWithoutExtension.

0
regex9  31.08.2019, 18:13
@Tastaturbrix

Ich habe irgendwie den Eindruck, dass du meinen Kommentar entweder nicht richtig liest oder nicht verstehst? 😶

Was machst du denn, wenn deine Dateien irgendwann einmal ebenso eine Länge von 12 Zeichen haben können bzw. die Ausgabe variieren soll (11 Zeichen oder 12 Zeichen)? Dann hast du eine festgeschriebene Abhängigkeit in deiner Funktion.

Vergleichendes Beispiel:

// bad
int getProduct(int number)
{
  return 2 * number;
}

// better (more flexible)
int getProduct(int number, int factor)
{
  return number * factor;
}
1
DonkeyShot  31.08.2019, 18:14
@Tastaturbrix

Wenn der Pfad Verzeichnis-Angaben enthält, dann musst du nicht vorher die Verzeichnisse manuell abschneiden, wenn du GetFileNameWithoutExtension aufrufst.

0
DonkeyShot  31.08.2019, 18:16
@Tastaturbrix

GetDirectoryName => "D:\Ordner\Ordner\Ordner\Ordner"

GetFileName => "142325F.txt"

GetFileNameWithoutExtension => "142325F"

GetExtension => ".txt"

1
Tastaturbrix 
Fragesteller
 31.08.2019, 18:20
@regex9

Also meine ankommenden Dateien haben immer die selbe länge, natürlich mit unterschiedlicher Zahlenfolge. Aber es stimmt für mehr Flexibilität sollte ich es abändern.

0
Tastaturbrix 
Fragesteller
 31.08.2019, 18:24
@DonkeyShot

Hab es geändert ^^

Mein Cut war in dem Falle sinnlos da ich ich mit GetFileWithoutExtension nur den namen bekomme...

Guten Morgen der Herr *lol* ^^

Vielen dank

0

Schau dir die Methode Path.GetFileNameWithoutExtension an.

Du könntest natürlich mit

String.LastIndexOf(Char)

arbeiten (hier

item.Substring(...).SubstringToLast('.')

mit entsprechend definierter Methode SubstringToLast(), die auf String.LastIndexOf(Char) zurückgreift), falls sichergestellt ist, dass immer ein Punkt im Dateinamen vorhanden ist, aber wie hier schon mehrfach erwähnt wurde, sollte man möglichst die eingebauten Funktionen verwenden.

Woher ich das weiß:Berufserfahrung – Software-Entwickler