using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using ExifLibrary; using JetBrains.Annotations; namespace PhotoRenamer.Base { public static class FilesHelper { private static readonly string[] SupportedFileExtensions = {".jpg", ".cr2", ".mp4"}; public static IEnumerable FindSupportedFilesRecursively(string path) { var files = Directory.EnumerateFiles(path, "*", SearchOption.AllDirectories); foreach (var file in files) { var fileExt = Path.GetExtension(file); if(fileExt == null) continue; foreach (var supportedFileExtension in SupportedFileExtensions) { if (fileExt.Equals(supportedFileExtension, StringComparison.InvariantCultureIgnoreCase)) yield return file; } } } public static IEnumerable GetMediaFiles([NotNull] IEnumerable files) { if (files == null) throw new ArgumentNullException(nameof(files)); foreach (var file in files) { var imageFile = ImageFile.FromFile(file); var dateTime = imageFile.Properties.Get(ExifTag.DateTimeOriginal); var mediaFile = new MediaFile(file, dateTime.Value); yield return mediaFile; } } } public class MediaFile { public string Path { get; } public DateTime CreationDate { get; } public MediaFile(string path, DateTime creationDate) { Path = path; CreationDate = creationDate; } } }