Добавить отметку времени к имени файла


119

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

Ответы:


261

Вы можете использовать метод 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)
            );
    }
}

1
Я добавил, Path.GetDirectoryName(fileName)чтобы получить полный путь к файлу. Затем заменить string.Concat()с Path.Combine()ГЭТ полное имя файла.
gilu 09

17

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

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

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

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

public long ToFileTime()

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

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


10

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


2

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

Stopwatch.GetTimestamp();

этот ответ так, как вы получаете метку времени !. добавьте его в файл с помощью класса Path, и манипуляции со строками вообще не проблема. это только альтернатива методу DateTime.ToString (String) или string.Format ("{0: yyyy-MM-dd_hh-mm-ss-tt}", DateTime.Now);
Джозеф

1

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

DateTime.Now.Ticks

1

Для Текущие дата и время как имя файла в файловой системе. Теперь вызовите метод string.Format и объедините его с DateTime.Now, чтобы получить метод, выводящий правильную строку на основе даты и времени.

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

Вывод :

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

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

текст - первая часть требуемых выходных файлов. Все файлы будут начинаться с текста -

{0: указывает, что это строковый заполнитель. Ноль указывает на индекс параметров, вставленных здесь.

гггг - выводит год в виде четырех цифр, за которыми следует тире. Проблема с "годом 10000"

MM- печатает месяц двумя цифрами.

dd_ Выводит день двумя цифрами с последующим подчеркиванием

чч- печатает час двумя цифрами

mm- печать минут, также в виде двух цифр

ss- Как и ожидалось, выводит секунды

tt Печатает AM или PM в зависимости от времени суток

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.