Додайте мітку часу до імені файлу


118

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

Відповіді:


260

Ви можете використовувати метод 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 (день), год (година 12), Н (година 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

17

Я вважаю за краще використовувати:

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

Що робить ToFileTime ()?

Перетворює значення поточного об'єкта DateTime у час файлу Windows.

public long ToFileTime()

Час файлу Windows - це 64-бітове значення, яке представляє кількість інтервалів 100 наносекунд, що минули з 12:00 півночі 1 січня 1601 р. Загальний координований час (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

Поточна дата та час, як ім'я файлу у файловій системі. Тепер зателефонуйте методу 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: Вказує, що це заповнення рядків. Нуль вказує на індекс введених тут параметрів

yyyy- Друкує рік у чотирьох цифрах, а потім - тире. У цьому проблема "10000" року

MM- Друкує місяць двома цифрами

dd_ Друкує день двома цифрами з подальшим підкресленням

hh- Друкує годину двома цифрами

мм- Друкує хвилину, також двома цифрами

ss- Як очікувалося, він друкує секунди

tt Друкує AM або PM залежно від часу доби

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.