2011-10-26 2 views
91

같은 디렉터리에 같은 파일의 여러 버전이 있기를 원하는 여러 번이 문제가 발생했습니다. C#을 사용하여이 작업을 수행 한 방식은 파일 이름에 시간 스탬프를 추가하는 것과 같습니다.이 파일은 DateTime.Now.ToString().Replace('/', '-').Replace(':', '.')과 같습니다. 더 좋은 방법이 있나요?파일 이름에 타임 스탬프 추가

답변

208

당신은 DateTime.ToString Method (String)

DateTime.Now.ToString("yyyyMMddHHmmssfff")

또는 string.Format

string.Format("{0:yyyy-MM-dd_hh-mm-ss-fff}",DateTime.Now)을 사용할 수 있습니다;

또는 Interpolated Strings

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

다음 사용자 지정 형식 지정 Y (년), M (개월), D (일), H (시간 12)가 있으며, H (시간 24) F (두 번째 소수점, 후미 0은 다듬어 짐), 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 (파일 이름)를'얻으려면 파일의 완전한 패스 그런 다음'string.Concat()'을'Path '로 대체했습니다.'()'는 전체 파일 이름을 얻습니다. – gilu

8

아마 DateTime.Now.Ticks을 추가하면 3 개의 문자열을 만들지 않으므로 조금 더 빠르며 틱 값도 항상 고유합니다.

11

내가 사용하는 것을 선호 :

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

ToFileTime()은 무엇을합니까?

현재 DateTime 개체의 값을 Windows 파일 시간으로 변환합니다.

public long ToFileTime()

윈도우 파일 시간이 자정 이후 경과 한 100 나노초 간격의 수 년 1 월 1 일 세계시 협정, 1601 AD (CE)을 나타내는 64 비트 값입니다 (UTC). Windows는 응용 프로그램에서 파일을 만들거나 액세스하거나 파일에 쓸 때 파일 시간을 사용하여 기록합니다.

출처 : MSDN documentation - DateTime.ToFileTime Method

2

당신이 사용할 수 있습니다

Stopwatch.GetTimestamp(); 
+0

이 대답은 타임 스탬프를받는 방식입니다. Path 클래스를 사용하여 파일에 추가하면 문자열 조작이 전혀 문제가되지 않습니다. 이것은 DateTime.ToString Method (String) 또는 string.Format ("{0 : yyyy-MM-dd_hh-mm-ss-tt}"대신 DateTime.Now)에 대한 유일한 대안입니다. – Joseph

1

대신 아래에 사용할 수 있습니다 내가 추가 한

DateTime.Now.Ticks 
관련 문제