2017-02-20 39 views
0

我有一些圖片與日期創建設置爲當我解壓縮他們和日期修改設置爲一些奇怪的時刻在過去。但是,'日期'屬性顯示創建時間(實際拍攝這些照片的時間)。有沒有辦法在C#中訪問該屬性? File.GetCreationTimeFileInfo.CreationTime都給我不正確的'創建日期'。 enter image description here如何在C#中獲取'日期'文件屬性

這是我的嘗試:

var allFiles = Directory.EnumerateFiles("."); 
foreach (var s in allFiles) 
{ 
    Console.WriteLine(s + " " + File.GetCreationTime(s)); 
} 

DirectoryInfo dir = new DirectoryInfo("."); 
FileInfo[] files = dir.GetFiles().OrderByDescending(p => p.CreationTime).ToArray(); 

foreach (var f in files) 
{ 
    Console.WriteLine(f.Name + " " + f.CreationTime + "/" + f.LastAccessTime + "/" + f.LastWriteTime); 
} 

編輯:

這「日期」實際上是「拍攝日期」字段,它不僅是一個文件的屬性,但的元數據的一部分圖像文件。

+0

你能證明你實際使用一些代碼? –

+0

正如我所說,我試過'File.GetCreationTime'和'FileInfo.CreationTime'。請參閱編輯 –

+0

請參閱https://dzone.com/articles/extracting-file-metadata-c-and-0 – NineBerry

回答

0

是的,你可以。這些類型的元數據在JPG文件中被稱爲EXIF標籤。

基本上你需要將JPG加載到System.Drawing.Bitmap,然後枚舉位圖的PropertyItems集合尋找id 0x9003,這與原始日期相關。當您找到該Id時,對應的Value將是原始日期的字符串表示形式。

您可以搜索EXIF標籤以列出所有可用的ID。

0

試試這個:

public DateTime? GetDateTakenFromBitmap(string bitmapFileName) 
{ 
    using (var bm = System.Drawing.Bitmap.FromFile(bitmapFileName)) 
    { 
     return 
      bm 
       .PropertyItems 
       .Where(x => x.Id == 0x9003) 
       .Select(x => 
       { 
        DateTime dt; 
        var enc = new ASCIIEncoding(); 
        var parsed = DateTime.TryParseExact(
         enc.GetString(x.Value, 0, x.Len - 1), 
         "yyyy:MM:dd HH:mm:ss", 
         CultureInfo.CurrentCulture, 
         DateTimeStyles.None, 
         out dt); 
        return parsed ? (DateTime?)dt : null; 
       }) 
       .FirstOrDefault(); 
    } 
}