Добавить метку времени к имени файла - PullRequest
109 голосов
/ 26 октября 2011

Я сталкивался с этой проблемой несколько раз, когда мне хотелось бы иметь несколько версий одного и того же файла в одном каталоге.Я делал это с помощью C #, добавляя отметку времени к имени файла с чем-то вроде DateTime.Now.ToString().Replace('/', '-').Replace(':', '.').Есть ли лучший способ сделать это?

Ответы [ 5 ]

239 голосов
/ 26 октября 2011

Вы можете использовать Метод DateTime.ToString (String)

DateTime.Now.ToString("yyyyMMddHHmmssfff")

или string.Format

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

или Интерполированные строки

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

Существуют следующие пользовательские спецификаторы формата y (год), M (месяц), d (день), h (час 12), H (час 24), m (минута), s (секунда), f (вторая дробь), F (вторая дробь, завершающие нули обрезаются), t (PM)или AM) и z (часовой пояс).

С методом расширения

Использование:

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

Метод расширения

public static class MyExtensions
{
    public static string AppendTimeStamp(this string fileName)
    {
        return string.Concat(
            Path.GetFileNameWithoutExtension(fileName),
            DateTime.Now.ToString("yyyyMMddHHmmssfff"),
            Path.GetExtension(fileName)
            );
    }
}
14 голосов
/ 20 февраля 2015

Я предпочитаю использовать:

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

Что делает ToFileTime ()?

Преобразует значение текущего объекта DateTime во время файла Windows.

public long ToFileTime()

Время файла Windows - это 64-разрядное значение, представляющее число интервалов в 100 наносекунд, прошедших с полуночи 12 января 1 января 1601 года нашей эры.Время (UTC).Windows использует время файла для записи, когда приложение создает, обращается или записывает в файл.

Источник: Документация MSDN - метод DateTime.ToFileTime

8 голосов
/ 26 октября 2011

Возможно добавление DateTime.Now.Ticks вместо этого немного быстрее, поскольку вы не будете создавать 3 строки, а значение тиков всегда будет уникальным.

2 голосов
/ 26 августа 2015

вы можете использовать:

Stopwatch.GetTimestamp();
1 голос
/ 01 февраля 2016

Вы можете использовать ниже вместо:

DateTime.Now.Ticks
...