136 votes

Ajouter l'horodatage à un nom de fichier

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

299voto

Damith Points 32311

Vous pouvez utiliser Méthode DateTime.ToString (Chaîne)

DateTime.Now.ToString("yyyyMMddHHmmssfff")

ou string.Format

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

ou Cordes interpolées

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

Il existe les 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 (seconde fraction), F (seconde fraction, les zéros de fin de période sont supprimés), t (P.M. ou A.M.) et z (heure). A.M.) et z (fuseau horaire).

Avec méthode d'extension

Utilisation :

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

2 votes

J'ai ajouté Path.GetDirectoryName(fileName) pour obtenir le chemin complet du fichier. Ensuite, on remplace string.Concat() avec Path.Combine() pour obtenir le nom complet du fichier.

21voto

Ads Points 313

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 minuit, le 1er janvier 1601 A.D. (C.E.) en temps universel coordonné (UTC). Windows utilise une heure de fichier pour enregistrer le moment où une application crée, accède ou écrit dans un fichier.

Source : Documentation MSDN - Méthode DateTime.ToFileTime

10voto

Icarus Points 36951

Peut-être qu'ajouter DateTime.Now.Ticks à la place, est un tout petit peu plus rapide puisque vous ne créerez pas 3 chaînes de caractères et que la valeur des ticks sera toujours unique également.

2voto

Joseph Points 136

Que vous pouvez utiliser :

Stopwatch.GetTimestamp();

0 votes

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

1voto

gokul Points 383

Vous pouvez utiliser le texte ci-dessous à la place :

DateTime.Now.Ticks

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X