2017-02-20 13 views
0

私はそれらを解凍したときに設定された日付を持つ写真をいくつか持っています。しかし、 'Date'属性は、私が実際にこれらの写真を撮った時間を示しています。 C#でその属性にアクセスする方法はありますか? File.GetCreationTimeFileInfo.CreationTimeの両方が私に間違った「作成日」を与えます。 enter image description hereC#で 'Date'ファイル属性を取得する方法

これは私が試したものです:

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:

この「日」は実際には「日撮影した」フィールドであり、それがファイル属性が、のメタデータの一部ではありませんイメージファイル。

+0

ていますか? –

+0

私が言ったように、私は 'File.GetCreationTime'と' FileInfo.CreationTime'を試しました。編集 –

+0

を参照してください。https://dzone.com/articles/extracting-file-metadata-c-and-0 – NineBerry

答えて

0

はいできます。これらの種類のメタデータは、JPGファイル内のEXIFタグとして知られています。

基本的には、System.Drawing.BitmapにJPGを読み込み、ビットマップの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(); 
    } 
} 
関連する問題