2017-03-03 2 views
1

Betrachten Sie den folgenden CodeÄndern von Dateinamen

Snippet
public static string AppendDateTimeToFileName(this string fileName) 
{ 
    return string.Concat(
     Path.GetFileNameWithoutExtension(fileName), 
     DateTime.Now.ToString("yyyyMMddHHmmssfff"), 
     Path.GetExtension(fileName)); 
} 

Dies stellt im Grunde ein Datum Zeitstempel auf eine Datei, die von den Benutzern hochgeladen werden. Jetzt funktioniert dies sehr gut ist der Dateiname ist so etwas wie

  • MyFile.png
  • AnotherFile.png

Jetzt versuche ich, diese Methode zu ändern, so dass, wenn der Dateiname so etwas wie

ist
  • MyFile - Kopieren (1) .png
  • AnotherFile - Kopieren (1) .png

Ich mag die Dateinamen

  • MyFile-Copy-120170303131815555.png
  • AnotherFile-Copy-120170303131815555.png

Wenn es eine einfache soltuion hierfür mit regex werden oder ähnlich oder muss ich die Methode neu schreiben und jeden dieser Werte einzeln überprüfen.

Antwort

3
return string.Concat(
     Regex.Replace(Path.GetFileNameWithoutExtension(fileName), @" - Copy\s*\(\d+\)", "-Copy-", RegexOptions.IgnoreCase), 
     DateTime.Now.ToString("yyyyMMddHHmmssfff"), 
     Path.GetExtension(fileName)); 

Dies entspricht einer beliebigen Anzahl von Ziffern und ist ein globales zu ersetzen.

+0

Vielen Dank für diese, wie würde ich für einen Dateinamen ** MyFile empfangen - Kopie (1) .png ** – Code

+0

'MyFile-Copy-20170303140526319.png' wäre das Ergebnis –

+0

Wenn die ** ** Kopie ist in Kleinbuchstaben wird die Regex immer noch übereinstimmen? – Code

Verwandte Themen