Agregar TimeStamp a un nombre de archivo

118

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

marca
fuente

Respuestas:

260

Puede usar el método DateTime.ToString (String)

DateTime.Now.ToString("yyyyMMddHHmmssfff")

o string.Format

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

o cadenas interpoladas

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

Existen los siguientes especificadores de formato personalizado y (año), M (mes), d (día), h (hora 12), H (hora 24), m (minuto), s (segundo), f (segunda fracción), F (segunda fracción, se recortan los ceros finales), 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)
            );
    }
}
Damith
fuente
1
Agregué Path.GetDirectoryName(fileName)para obtener la ruta completa al archivo. Luego se reemplaza string.Concat()con Path.Combine()obtener el nombre de archivo completo.
gilu
17

Prefiero usar:

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

¿Qué hace ToFileTime ()?

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

public long ToFileTime()

Una hora de archivo de Windows es un valor de 64 bits que representa el número de intervalos de 100 nanosegundos que han transcurrido desde las 12:00 de la medianoche del 1 de enero de 1601 AD (CE) Hora universal coordinada (UTC). Windows usa un tiempo de archivo para registrar cuando una aplicación crea, accede o escribe en un archivo.

Fuente: documentación de MSDN - Método DateTime.ToFileTime

Anuncios
fuente
10

Quizás agregar en su DateTime.Now.Tickslugar, es un poquito más rápido ya que no creará 3 cadenas y el valor de ticks siempre será único también.

Ícaro
fuente
2

puedes usar:

Stopwatch.GetTimestamp();
Joseph
fuente
esta respuesta es la forma en que obtienes la marca de tiempo. adjúntelo a un archivo usando la clase Path y la manipulación de cadenas no es un problema en absoluto. esto es solo una alternativa al método DateTime.ToString (String) o string.Format ("{0: aaaa-MM-dd_hh-mm-ss-tt}", DateTime.Now);
Joseph
1

Puede usar a continuación en su lugar:

DateTime.Now.Ticks
gokul
fuente
1

Para Fecha y hora actuales como nombre de un archivo en el sistema de archivos. Ahora llame al método string.Format y combínelo con DateTime.Now para obtener un método que genere la cadena correcta según la fecha y la hora.

using System;
using System.IO;

class Program
{
    static void Main()
    {
        //
        // Write file containing the date with BIN extension
        //
        string n = string.Format("text-{0:yyyy-MM-dd_hh-mm-ss-tt}.bin",
            DateTime.Now);
        File.WriteAllText(n, "abc");
    }
}

Salida:

C:\Users\Fez\Documents\text-2020-01-08_05-23-13-PM.bin

"text-{0:yyyy-MM-dd_hh-mm-ss-tt}.bin"

texto: la primera parte de la salida requerida Los archivos comenzarán con texto:

{0: indica que se trata de un marcador de posición de cadena. El cero indica el índice de los parámetros insertados aquí.

aaaa: imprime el año en cuatro dígitos seguidos de un guión Esto tiene un problema de "año 10000"

MM: imprime el mes en dos dígitos

dd_ Imprime el día en dos dígitos seguidos de un guión bajo

hh: imprime la hora en dos dígitos

mm: imprime el minuto, también en dos dígitos

ss- Como se esperaba, imprime los segundos

tt Imprime AM o PM según la hora del día

Fezal halai
fuente