C# 获取文件详细备注信息 (如图片、视频实际创建时间)
2021-06-16 08:04
标签:write coding inf 添加引用 创建时间 line wing tde code 在整理照片/视频时想根据实际拍摄时间重命名文件,但 System.IO.FileInfo 只能获取到文件的创建时间或最后写入时间,不符合要求,遂寻找解决方案 此方法仅适用于图片:pass C#通过shell32获取文件详细备注信息 How to use Shell32 within a C# application? Exception when using Shell32 to get File extended properties 操作步骤: 添加shell32引用 (C:\Windows\System32\shell32.dll 或 在 VS 中添加引用 .COM -> Microsoft Shell Controls and Automation) 设置 dll "嵌入互操作类型" 为 false 此方法适用于图片和视频(id 不同),但是在实际中获取到的时间字符串包含乱码无法转换成时间:pass how-do-i-find-the-date-a-video-avi-mp4-was-actually-recorded Microsoft.WindowsAPICodePack-Shell 此方法完全符合要求,支持所有类型的文件。同时也可以获取文件的其他信息,如作者等 开源地址 C# 获取文件详细备注信息 (如图片、视频实际创建时间) 标签:write coding inf 添加引用 创建时间 line wing tde code 原文地址:https://www.cnblogs.com/victorbu/p/10349702.html
方案 1: System.Drawing
static void Main(string[] args)
{
var file = @"D:\image\IMG_6789.JPG";
var image = Image.FromFile(file);
var propItems = image.PropertyItems;
var propItem = image.GetPropertyItem(0x9003); //Id 为 0x9003 表示拍照的时间
var propItemValue = propItem.Value;
image.Dispose();
var dateTimeStr = System.Text.Encoding.ASCII.GetString(propItemValue).Trim(‘\0‘);
var dt = DateTime.ParseExact(dateTimeStr, "yyyy:MM:dd HH:mm:ss", CultureInfo.InvariantCulture);
Console.WriteLine(dt);
}
方案 2: shell32
static void Main(string[] args)
{
var file = @"D:\image\IMG_6789.JPG";
var shell = new ShellClass();
var dir = shell.NameSpace(Path.GetDirectoryName(file));
var item = dir.ParseName(Path.GetFileName(file));
var dateTimeStr = dir.GetDetailsOf(item, 12);// 12 为照片拍摄时间
}
方案 3: Microsoft.WindowsAPICodePack.Shell (采用方案)
static void Main(string[] args)
{
var file = @"D:\image\IMG_6789.JPG";
ShellObject obj = ShellObject.FromParsingName(file);
var takenDate = obj.Properties.System.ItemDate.Value;
Console.WriteLine(takenDate);
Console.ReadLine();
}
上一篇:CF2A Winner
文章标题:C# 获取文件详细备注信息 (如图片、视频实际创建时间)
文章链接:http://soscw.com/essay/94496.html