在整理照片/视频时想根据实际拍摄时间重命名文件,但 System.IO.FileInfo 只能获取到文件的创建时间或最后写入时间,不符合要求,遂寻找解决方案

方案 1: System.Drawing

  1. c#从相机拍摄的照片中提取拍摄时间
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);
}

此方法仅适用于图片:pass

方案 2: shell32

  1. C#通过shell32获取文件详细备注信息

  2. [How to use Shell32 within a C# application?](How to use Shell32 within a C# application?)

  3. Exception when using Shell32 to get File extended properties

操作步骤:

  1. 添加shell32引用 (C:\Windows\System32\shell32.dll 或 在 VS 中添加引用 .COM -> Microsoft Shell Controls and Automation)

  2. 设置 dll "嵌入互操作类型" 为 false

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 为照片拍摄时间
}

此方法适用于图片和视频(id 不同),但是在实际中获取到的时间字符串包含乱码无法转换成时间:pass

方案 3: Microsoft.WindowsAPICodePack.Shell (采用方案)

  1. how-do-i-find-the-date-a-video-avi-mp4-was-actually-recorded

  2. 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();
}

此方法完全符合要求,支持所有类型的文件。同时也可以获取文件的其他信息,如作者等

开源地址

C# 获取文件详细备注信息 (如图片、视频实际创建时间)的更多相关文章

  1. C#通过shell32获取文件详细备注信息

    1.从系统Window/System32文件夹中Copy出 Shell32.dll Com组件 将Shell32.dll文件引用到项目中,并设置“嵌入互操作类型”为false http://blog. ...

  2. C#获取FTP文件详细备注信息

    private void button1_Click(object sender, RoutedEventArgs e) { Uri uri = new Uri("ftp://192.168 ...

  3. fsck获取文件的block信息和位置信息

    原文链接:lxw的大数据田地 » hdfs fsck命令查看HDFS文件对应的文件块信息(Block)和位置信息(Locations) 关键字:hdfs fsck.block.locations 在H ...

  4. Windows下通过命令行 获取文件详细信息

    @echo off echo version: wmic datafile where Name="C:\\Product\\File\\Release\\1.1.1\\File.exe&q ...

  5. R语言学习笔记(十五):获取文件和目录信息

    file.info() 参数是表示文件名称的字符串向量,函数会给出每个文件的大小.创建时间.是否为目录等信息. > file.info("z.txt") size isdir ...

  6. Thinkphp5获取文件上传信息

    Thinkphp5内置有处理文件上传的方法,因在开发文档没有找到获取上传文件基本信息的说明,故在这里做一下记录. $file = request()->file('input类型为file的na ...

  7. C#开发BIMFACE系列6 服务端API之获取文件信息

    在<C#开发BIMFACE系列4 服务端API之源上传文件>.<C#开发BIMFACE系列5 服务端API之文件直传>两篇文章中详细介绍了如何将本地文件上传到BIMFACE服务 ...

  8. C#开发BIMFACE系列7 服务端API之获取文件信息列表

    系列目录     [已更新最新开发文章,点击查看详细] 本文详细介绍如何获取BIMFACE平台中所有上传过的文件信息列表. 请求地址:GET https://file.bimface.com/file ...

  9. stat()函数--------------获取文件信息

    stat():用于获取文件的状态信息,使用时需要包含<sys/stat.h>头文件. 函数原型:int stat(const char *path, struct stat *buf): ...

随机推荐

  1. 【P1941】 飞扬的小鸟

    题目描述 游戏界面是一个长为 nn,高为 mm 的二维平面,其中有 kk 个管道(忽略管道的宽度). 小鸟始终在游戏界面内移动.小鸟从游戏界面最左边任意整数高度位置出发,到达游戏界面最右边时,游戏完成 ...

  2. jmeter(二十二)内存溢出原因及解决方法

    jmeter是一个java开发的开源性能测试工具,在性能测试中可支持模拟并发压测,但有时候当模拟并发请求较大或者脚本运行时间较长时,压力机会出现卡顿甚至报异常————内存溢出, 这里就介绍下如何解决内 ...

  3. ADO.NET 中可以发送包含多个SQL语句的批处理脚本到SQL Server,但是用MySQL的ODBC驱动不行

    众所周知,我们在ADO.NET中可以使用NuGet包System.Data.SqlClient来操作SQL Server,并且ADO.NET是支持向SQL Server发送包含多个SQL语句的批处理脚 ...

  4. odoo11 安装python ldap

    最近在研究odoo11使用ldap登录的问题,本来自己想着怎么开发,无意间在odoo11代码中看到auth_ldap的模块,原来框架已经考虑到了这个,简单研究了代码之后,理解了其大概的登录处理过程,此 ...

  5. centos 7 安装elasticsearch

    安装java1.8 详见:http://www.cnblogs.com/cgyqu/p/7271480.html 安装es cd /usr/local mkdir elasticsearch cd e ...

  6. App Inspector-iOS真机功能详解

    前言: App Inspector:浏览器端的移动设备 UI 查看器,使用树状态结构查看 UI 布局,自动生成 XPaths.官网:https://macacajs.github.io/app-ins ...

  7. webpack--配置output

    Output output  配置如何输出最终想要的代码. output  是一个  object ,里面包含一系列配置项,下面分别介绍它们. filename output.filename  配置 ...

  8. Django异常问题之Error: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试。

    一般情况下,我们启动Django项目时默认设置的端口为8000,当你听着酷狗音乐敲着代码,启动Django项目时忽然翻车了. 不要慌,那是酷狗抢先一步占用了8000端口,解决这个问题的方式就是修改端口 ...

  9. xmanager 乱码

    xmanager连接后中文显示乱码 - 程序员CC - 博客园http://www.cnblogs.com/aomidata/p/3445075.html Xshell 为什么会出现中文乱码?-Xma ...

  10. 面向对象设计的SOLID原则、迪米特法则

    SPR(The Single Responsibility Principle):单一责任原则 OCP(The Open Closed Principle):开放封闭原则 LSP(The Liskov ...