2011-10-26 13 views
91

Mi sono imbattuto più volte in questo problema in cui mi piacerebbe avere più versioni dello stesso file nella stessa directory. Il modo in cui lo sto usando con C# è aggiungendo un timestamp al nome del file con qualcosa come questo DateTime.Now.ToString().Replace('/', '-').Replace(':', '.'). C'è un modo migliore per farlo?Aggiungi TimeStamp a un nome file

risposta

208

È possibile utilizzare DateTime.ToString Method (String)

DateTime.Now.ToString("yyyyMMddHHmmssfff")

o string.Format

string.Format("{0:yyyy-MM-dd_hh-mm-ss-fff}",DateTime.Now);

o Interpolated Strings

$"{DateTime.Now:yyyy-MM-dd_hh-mm-ss-fff}"

Ci sono seguente formato personalizzato identificatori y (anno), M (mese), D (giorno), h (ore 12), H (24 ore) , m (minuto), s (secondo), f (seconda frazione ), F (seconda frazione, zero finali sono tagliati), t (PM o AM) ez (fuso orario).

Con Metodo di estensione

Usage:

string result = "myfile.txt".AppendTimeStamp(); 
//myfile20130604234625642.txt 

metodo di estensione

public static class MyExtensions 
{ 
    public static string AppendTimeStamp(this string fileName) 
    { 
     return string.Concat(
      Path.GetFileNameWithoutExtension(fileName), 
      DateTime.Now.ToString("yyyyMMddHHmmssfff"), 
      Path.GetExtension(fileName) 
      ); 
    } 
} 
+1

Ho aggiunto 'Path.GetDirectoryName (fileName)' per ottenere il percorso completo del file. Quindi ha sostituito 'string.Concat()' con 'Path.Combina() 'ottieni il nome completo. – gilu

8

Forse aggiungere DateTime.Now.Ticks invece, è un po 'più veloce poiché non si creeranno 3 stringhe e il valore delle zecche sarà sempre anche unico.

11

Io preferisco usare:

string result = "myFile_" + DateTime.Now.ToFileTime() + ".txt"; 

Cosa fa ToFileTime()?

Converte il valore dell'oggetto DateTime corrente in un file di Windows.

public long ToFileTime()

tempo di file

Un Windows è un valore a 64 bit che rappresenta il numero di intervalli di 100 nanosecondi trascorsi dal 12:00 a mezzanotte, 1 GENNAIO 1601 AD (CE) Coordinated Universal Time (UTC). Windows utilizza un tempo di file per registrare quando un'applicazione crea, accede o scrive su un file.

Fonte: MSDN documentation - DateTime.ToFileTime Method

2

è possibile utilizzare:

Stopwatch.GetTimestamp(); 
+0

questa risposta il modo in cui ottieni il timestamp !. aggiungilo a un file usando la classe Path e la manipolazione delle stringhe non è affatto un problema. questa è solo un'alternativa al metodo DateTime.ToString (String) o string.Format ("{0: yyyy-MM-dd_hh-mm-ss-tt}", DateTime.Now); – Joseph

1

È possibile utilizzare sotto invece:

DateTime.Now.Ticks