web-dev-qa-db-fra.com

Ajouter TimeStamp à un nom de fichier

J'ai rencontré ce problème à plusieurs reprises 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 avec C # consiste à ajouter un horodatage au nom du fichier avec quelque chose comme ceci DateTime.Now.ToString().Replace('/', '-').Replace(':', '.'). Y a-t-il une meilleure manière de faire cela?

111
Mark

Vous pouvez utiliser méthode DateTime.ToString (String)

DateTime.Now.ToString("yyyyMMddHHmmssfff")

ou string.Format

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

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

avec 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)
            );
    }
}
244
Damith

Je préfère utiliser:

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

Que fait ToFileTime ()?

Convertit la valeur de l'objet DateTime actuel en 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 12 h 00 le 1er janvier 1601 après J.-C. (C.E.), le temps universel coordonné (UTC). Windows utilise un temps de fichier pour enregistrer quand une application crée, accède ou écrit dans un fichier.

Source: documentation MSDN - Méthode DateTime.ToFileTime

14
Ads

Peut-être que l’ajout de DateTime.Now.Ticks à la place sera un peu plus rapide, car vous ne créerez pas de 3 chaînes et la valeur des ticks sera toujours unique également.

8
Icarus

vous pouvez utiliser:

Stopwatch.GetTimestamp();
2
Joseph

Vous pouvez utiliser ci-dessous à la place:

DateTime.Now.Ticks
1
gokul