2017-02-20 6 views
0

У меня есть несколько фотографий с датой, созданной в тот момент, когда я разархивировал их и изменил дату, настроенный на какой-то странный момент в прошлом. Однако атрибут «Дата» показывает время создания coorect (время, когда я фактически снимал эти снимки). Есть ли способ получить доступ к этому атрибуту в C#? И File.GetCreationTime, и FileInfo.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); 
} 

EDIT:

Это «Date» на самом деле поле «Дата съемки», и это не атрибут файла, а часть метаданных файлы изображений.

+0

смог показать некоторый код, который вы на самом деле с помощью Вы? –

+0

Как я уже сказал, я попробовал «File.GetCreationTime» и «FileInfo.CreationTime». См. Edit –

+0

См. Https://dzone.com/articles/extracting-file-metadata-c-and-0 – NineBerry

ответ

0

Да, вы можете. Эти метаданные известны как EXIF-теги в файле JPG.

В принципе, вам необходимо загрузить JPG в System.Drawing.Bitmap, а затем перечислить коллекцию растрового изображения PropertyItems, ища идентификатор 0x9003, который коррелирует с исходной датой. Когда вы найдете этот идентификатор, соответствующее Value будет строковым представлением исходной даты.

Вы можете искать метки EXIF, чтобы отобразить список всех доступных идентификаторов.

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(); 
    } 
} 
Смежные вопросы