2017-02-20 45 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(); 
    } 
} 
相关问题