Dosya Adına TimeStamp Ekleme


119

Aynı dosyanın birden çok sürümünün aynı dizinde olmasını istediğim bu soruna birkaç kez rastladım. Bunu C # kullanarak yapma şeklim, bunun gibi bir şeyle dosya adına bir zaman damgası eklemektir DateTime.Now.ToString().Replace('/', '-').Replace(':', '.'). Bunu yapmanın daha iyi bir yolu var mı?

Yanıtlar:


261

Sen kullanabilirsiniz DateTime.ToString Yöntemi (String)

DateTime.Now.ToString("yyyyMMddHHmmssfff")

veya string.Format

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

veya Enterpolasyonlu Dizeler

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

Aşağıdaki özel biçim belirleyicileri vardır y (yıl), M (ay), d (gün), h (saat 12), H (saat 24), m (dakika), s (saniye), f (ikinci kesir), F (ikinci kesir, sondaki sıfırlar kırpılır), t (PM veya AM) ve z (saat dilimi).

Uzatma Yöntemi ile

Kullanımı:

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

Uzatma yöntemi

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)Dosyanın tam yolunu almak için ekledim . Sonra tam dosya adını al string.Concat()ile değiştirilir Path.Combine().
gilu

17

Kullanmayı tercih ederim:

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

ToFileTime () ne yapar?

Geçerli DateTime nesnesinin değerini bir Windows dosya saatine dönüştürür.

public long ToFileTime()

Bir Windows dosya saati, 1 Ocak 1601 AD (CE) Koordineli Evrensel Saat (UTC) gece yarısı 12: 00'den beri geçen 100 nanosaniye aralıkların sayısını temsil eden 64 bitlik bir değerdir. Windows, bir uygulama bir dosya oluşturduğunda, dosyaya eriştiğinde veya ona yazdığında kaydetmek için bir dosya zamanı kullanır.

Kaynak: MSDN belgeleri - DateTime.ToFileTime Yöntemi


10

Belki de DateTime.Now.Ticksbunun yerine eklemek biraz daha hızlıdır çünkü 3 dizge oluşturmayacaksınız ve tik değeri de her zaman benzersiz olacaktır.


2

kullanabilirsiniz:

Stopwatch.GetTimestamp();

bu cevap, zaman damgasını alma şeklinize !. Path sınıfını kullanarak bunu bir dosyaya eklerseniz, dize manipülasyonu hiç sorun olmaz. bu yalnızca DateTime.ToString Method (String) veya string.Format ("{0: yyyy-MM-dd_hh-mm-ss-tt}", DateTime.Now) için bir alternatiftir;
Joseph

1

Bunun yerine aşağıdakini kullanabilirsiniz:

DateTime.Now.Ticks

1

Dosya sistemindeki bir dosyanın adı olarak Geçerli tarih ve saat için. Şimdi string.Format yöntemini çağırın ve tarih ve saate göre doğru dizeyi çıkaran bir yöntem için DateTime.Now ile birleştirin.

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

Çıktı :

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

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

text- Gerekli Dosyaların çıktısının ilk kısmı metinle başlayacaktır.

{0: Bunun bir dize yer tutucusu olduğunu belirtir Sıfır, buraya eklenen parametrelerin dizinini gösterir

yyyy- Yılı dört basamakla ve ardından bir tire ile yazdırır Bu bir "10000 yıl" sorunu var

MM- Ayı iki basamaklı yazdırır

dd_ Günü iki basamaklı ve ardından bir alt çizgi ile yazdırır

hh- Saati iki basamaklı olarak yazdırır

mm- Dakikayı iki basamaklı olarak da yazdırır

ss- Beklendiği gibi, saniyeleri yazdırır

tt Günün saatine bağlı olarak AM veya PM yazdırır

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.