Aggiungi TimeStamp a un nome file


118

Mi sono imbattuto in questo problema più volte in cui vorrei avere più versioni dello stesso file nella stessa directory. Il modo in cui l'ho fatto usando C # è aggiungendo un timestamp al nome del file con qualcosa di simile DateTime.Now.ToString().Replace('/', '-').Replace(':', '.'). C'è un modo migliore per farlo?

Risposte:


260

È possibile utilizzare il metodo DateTime.ToString (String)

DateTime.Now.ToString("yyyyMMddHHmmssfff")

o string.Format

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

o stringhe interpolate

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

Sono disponibili i seguenti specificatori di formato personalizzati y (anno), M (mese), d (giorno), h (ora 12), H (ora 24), m (minuto), s (secondo), f (seconda frazione), F (seconda frazione, gli zeri finali vengono tagliati), t (PM o AM) e z (fuso orario).

Con il metodo di estensione

Uso:

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 sostituito string.Concat()con Path.Combine()ottieni il nome file completo.
Gilu

17

Preferisco usare:

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

Cosa fa ToFileTime ()?

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

public long ToFileTime()

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

Fonte: documentazione MSDN - Metodo DateTime.ToFileTime


10

Forse l'aggiunta DateTime.Now.Ticks, invece, è un po 'più veloce poiché non creerai 3 stringhe e anche il valore dei tick sarà sempre unico.


2

Puoi usare:

Stopwatch.GetTimestamp();

questa risposta nel modo in cui ottieni il timestamp !. aggiungerlo a un file utilizzando 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

Puoi usare di seguito invece:

DateTime.Now.Ticks

1

Per Data e ora correnti come nome di un file nel file system. Ora chiama il metodo string.Format e combinalo con DateTime.Now, per un metodo che restituisce la stringa corretta in base alla data e all'ora.

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");
    }
}

Produzione :

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

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

testo- La prima parte dell'output richiesto I file inizieranno tutti con testo-

{0: indica che si tratta di un segnaposto di stringa. Lo zero indica l'indice dei parametri qui inseriti

aaaa- Stampa l'anno su quattro cifre seguite da un trattino. Questo problema presenta un "anno 10000"

MM- Stampa il mese in due cifre

dd_ Stampa il giorno su due cifre seguite da un trattino basso

hh- Stampa l'ora in due cifre

mm- Stampa i minuti, anche in due cifre

ss- Come previsto, stampa i secondi

tt Stampa AM o PM a seconda dell'ora del giorno

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.