Ajouter TimeStamp à un nom de fichier


119

J'ai rencontré plusieurs fois ce problème dans lequel je voudrais avoir plusieurs versions du même fichier dans le même répertoire. La façon dont je l'ai fait en utilisant C # est d'ajouter un horodatage au nom du fichier avec quelque chose comme ça DateTime.Now.ToString().Replace('/', '-').Replace(':', '.'). Y a-t-il une meilleure manière de faire cela?

Réponses:


261

Vous pouvez utiliser la méthode DateTime.ToString (chaîne)

DateTime.Now.ToString("yyyyMMddHHmmssfff")

ou une chaîne.

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

ou chaînes interpolées

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

Il existe des spécificateurs de format personnalisés suivants: y (année), M (mois), d (jour), h (heure 12), H (heure 24), m (minute), s (seconde), f (seconde fraction), F (deuxième fraction, les zéros de fin sont coupés), t (PM ou AM) et z (fuseau horaire).

Avec la méthode d'extension

Usage:

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

Méthode d'extension

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
J'ai ajouté Path.GetDirectoryName(fileName)pour obtenir le chemin complet du fichier. Puis remplacé string.Concat()par Path.Combine()le get le nom de fichier complet.
gilu

17

Je préfère utiliser:

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

Que fait ToFileTime ()?

Convertit la valeur de l'objet DateTime actuel en une heure de fichier Windows.

public long ToFileTime()

Une heure de fichier Windows est une valeur de 64 bits qui représente le nombre d'intervalles de 100 nanosecondes qui se sont écoulés depuis le 1er janvier 1601 AD (CE) Coordinated Universal Time (UTC) à minuit à minuit. Windows utilise une heure de fichier pour enregistrer lorsqu'une application crée, accède ou écrit dans un fichier.

Source: documentation MSDN - Méthode DateTime.ToFileTime


10

Peut-être que l'ajout à la DateTime.Now.Ticksplace est un peu plus rapide car vous ne créerez pas 3 chaînes et la valeur des graduations sera toujours unique également.


2

vous pouvez utiliser:

Stopwatch.GetTimestamp();

cette réponse la façon dont vous obtenez l'horodatage !. ajoutez-le à un fichier à l'aide de la classe Path et la manipulation de la chaîne n'est pas du tout un problème. ceci seulement une alternative à DateTime.ToString Method (String) ou string.Format ("{0: yyyy-MM-dd_hh-mm-ss-tt}", DateTime.Now);
Joseph

1

Vous pouvez utiliser ci-dessous à la place:

DateTime.Now.Ticks

1

Pour Date et heure actuelles comme nom d'un fichier sur le système de fichiers. Appelez maintenant la méthode string.Format et combinez-la avec DateTime.Now, pour une méthode qui génère la chaîne correcte en fonction de la date et de l'heure.

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

Production :

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

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

text- La première partie de la sortie requise Les fichiers commenceront tous par du texte-

{0: indique qu'il s'agit d'un espace réservé de chaîne Le zéro indique l'index des paramètres insérés ici

aaaa - Imprime l'année en quatre chiffres suivis d'un tiret Il y a un problème "année 10000"

MM- Imprime le mois sur deux chiffres

jj_ Imprime le jour sur deux chiffres suivis d'un trait de soulignement

hh- Imprime l'heure sur deux chiffres

mm- Imprime la minute, également sur deux chiffres

ss- Comme prévu, il imprime les secondes

tt Imprime AM ou PM selon l'heure de la journée

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.