56 lines
1.7 KiB
C#
56 lines
1.7 KiB
C#
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<string> 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<MediaFile> GetMediaFiles([NotNull] IEnumerable<string> files)
|
|
{
|
|
if (files == null) throw new ArgumentNullException(nameof(files));
|
|
|
|
foreach (var file in files)
|
|
{
|
|
var imageFile = ImageFile.FromFile(file);
|
|
var dateTime = imageFile.Properties.Get<ExifDateTime>(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;
|
|
}
|
|
}
|
|
}
|