为什么我对照片的排序总是与Windows系统的不一样呢?
我们在文件夹中有一批图片在进行查看的时候当排序方式是日期的时候到底是按照怎么样的顺序排列的呢在 c# 里面我们尝试把它认为是图片的创建时间(new FileInfo(F:\\1.png).CreationTime), 也尝试让它是图片的最后修改时间(new FileInfo(F:\\1.png).LastWriteTime), 也尝试使用 Shlwapi.DLL[System.Runtime.InteropServices.DllImport(Shlwapi.dll, CharSet CharSet.Unicode)] private static extern int StrCmpLogicalW(string param1, string param2);但是都没有看到与系统一致的顺序。尤其对于图片的创建时间当我们把图片拷贝到另外一台电脑的时候它的创建时间又进行了更新。不过我们突然发现了图片包含了非常丰富的属性发现了没这里的拍摄日期就是我们需要的排序时间, 按照 EXIF 标签 里面这个时间排序得到的结果与系统排序的顺序是完全一致的// EXIF 标签拍摄原图时间 / 数字化时间 / 修改时间 private static readonly int[] DateTakenIds { 0x9003, 0x9004, 0x0132 }; public static DateTime? TryGetDateTaken(string path) { using (var fs new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) using (var img Image.FromStream(fs, useEmbeddedColorManagement: false, validateImageData: false)) { foreach (var id in DateTakenIds) { if (Array.IndexOf(img.PropertyIdList, id) 0) continue; var prop img.GetPropertyItem(id); // EXIF 字符串形如 2026:06:26 13:52:00 var s Encoding.ASCII.GetString(prop.Value).Trim(\0, , \r, \n); if (DateTime.TryParseExact(s, yyyy:MM:dd HH:mm:ss, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out var dt)) return dt; } } return null; // 没有拍摄信息 }