2011-10-26 24 views
91

Me he encontrado con este problema varias veces en el que me gustaría tener varias versiones del mismo archivo en el mismo directorio. La forma en que lo he estado usando C# es agregando un sello de tiempo al nombre del archivo con algo como esto DateTime.Now.ToString().Replace('/', '-').Replace(':', '.'). ¿Hay una mejor manera de hacer esto?Adjuntar TimeStamp a un nombre de archivo

Respuesta

208

Puede utilizar 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}"

Hay siguientes especificadores de formato personalizado Y (años), M (mes), d (días), h (hora 12), H (hora 24) , m (minuto), s (segundo), f (segunda fracción ), F (segunda fracción, ceros finales se recortan), t (PM o AM) yz (zona horaria).

Con Método de extensión

Uso:

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

método de extensión

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

He añadido 'Path.GetDirectoryName (nombre del archivo)' para obtener la ruta completa al archivo. Luego reemplazó 'string.Concat()' con 'Path.Combine() 'the get the full filename. – gilu

8

En su lugar, agregar DateTime.Now.Ticks es un poco más rápido ya que no creará 3 cadenas y el valor de las marcas siempre será único también.

11

Yo prefiero usar:

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

¿Qué hace ToFileTime()?

Convierte el valor del objeto DateTime actual a una hora de archivo de Windows.

public long ToFileTime()

tiempo de archivo

Un Windows es un valor de 64 bits que representa el número de intervalos de 100 nanosegundos transcurridos desde las 12:00 am, 1 de enero 1601 ANUNCIO (CE) Tiempo Universal Coordinado (UTC) Windows usa una hora de archivo para registrar cuando una aplicación crea, accede o escribe en un archivo.

Fuente: MSDN documentation - DateTime.ToFileTime Method

2

que puede utilizar:

Stopwatch.GetTimestamp(); 
+0

¡esto responde la forma en que obtienes la marca de tiempo !. añádalo a un archivo utilizando la clase Path y la manipulación de cadenas no es un problema. esto solo es una alternativa al método DateTime.ToString (String) o string.Format ("{0: aaaa-MM-dd_hh-mm-ss-tt}", DateTime.Now); – Joseph

1

Usted puede utilizar en lugar de abajo:

DateTime.Now.Ticks 
Cuestiones relacionadas