From a8e89b841eb9db28f1ae647db3676c8efe4762ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Holger=20B=C3=B6rchers?= Date: Sun, 1 Nov 2020 20:35:50 +0100 Subject: [PATCH] Get lastAccessTime from file --- PhotoRenamer/Renamer.cs | 88 +++++++++++++++++++---------------- PhotoRenamer/appsettings.json | 4 +- 2 files changed, 50 insertions(+), 42 deletions(-) diff --git a/PhotoRenamer/Renamer.cs b/PhotoRenamer/Renamer.cs index caa73ed..97b45aa 100644 --- a/PhotoRenamer/Renamer.cs +++ b/PhotoRenamer/Renamer.cs @@ -1,25 +1,25 @@ -using System; +using MetadataExtractor; +using MetadataExtractor.Formats.Exif; +using MetadataExtractor.Formats.QuickTime; +using Microsoft.Extensions.Configuration; +using Serilog; +using ShellProgressBar; +using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Threading; using System.Threading.Tasks; -using MetadataExtractor; -using MetadataExtractor.Formats.Exif; -using MetadataExtractor.Formats.QuickTime; -using Microsoft.Extensions.Configuration; -using Serilog; -using ShellProgressBar; using Directory = System.IO.Directory; namespace PhotoRenamer { internal class Renamer { + private readonly ProgressBarOptions _childOptions; private readonly string _sourcePath; private readonly string _targetPath; - private readonly ProgressBarOptions _childOptions; public Renamer(IConfiguration configuration) { @@ -48,13 +48,15 @@ namespace PhotoRenamer }; var i = 0; using var progressBar = new ProgressBar(files.Length, "Copying files", options); - var po = new ParallelOptions {MaxDegreeOfParallelism = 4}; + var po = new ParallelOptions { MaxDegreeOfParallelism = 4 }; Parallel.ForEach(files, po, file => { try { var directories = ImageMetadataReader.ReadMetadata(file); - var dateTime = GetDateTimeFromExif(directories) ?? GetDateTimeFromMp4(directories); + var dateTime = GetDateTimeFromExif(directories) + ?? GetDateTimeFromMp4(directories) + ?? GetDateTimeFromCreate(file); if (dateTime is null) return; var folder = CreateFolder(dateTime.GetValueOrDefault()); CopyFile(folder, file, progressBar); @@ -73,6 +75,42 @@ namespace PhotoRenamer return 0; } + private static DateTime? GetDateTimeFromCreate(string file) + { + var creationTime = File.GetLastWriteTime(file); + return creationTime; + } + + private static DateTime? GetDateTimeFromExif(IEnumerable directories) + { + DateTime dateTime = default; + return directories + .OfType() + .FirstOrDefault()? + .TryGetDateTime(ExifDirectoryBase.TagDateTime, out dateTime) == true + ? (DateTime?)dateTime + : null; + } + + private static DateTime? GetDateTimeFromMp4(IEnumerable directories) + { + DateTime dateTime = default; + return directories + .OfType() + .FirstOrDefault()? + .TryGetDateTime(QuickTimeMovieHeaderDirectory.TagCreated, out dateTime) == true + ? (DateTime?)dateTime + : null; + } + + private static void ResetTimes(FileSystemInfo destination, FileSystemInfo source) + { + destination.LastWriteTime = source.LastWriteTime; + destination.LastWriteTimeUtc = source.LastWriteTimeUtc; + destination.CreationTime = source.CreationTime; + destination.CreationTimeUtc = source.CreationTimeUtc; + } + private void CopyFile(string folder, string file, ProgressBarBase progressBar) { var destination = new FileInfo(Path.Combine(folder, Path.GetFileName(file))); @@ -98,41 +136,11 @@ namespace PhotoRenamer child.Tick(100); } - private static void ResetTimes(FileSystemInfo destination, FileSystemInfo source) - { - destination.LastWriteTime = source.LastWriteTime; - destination.LastWriteTimeUtc = source.LastWriteTimeUtc; - destination.CreationTime = source.CreationTime; - destination.CreationTimeUtc = source.CreationTimeUtc; - } - private string CreateFolder(DateTime dateTime) { var folder = Path.Combine(_targetPath, dateTime.Year.ToString(), dateTime.Month.ToString("D2")); if (!Directory.Exists(folder)) Directory.CreateDirectory(folder); return folder; } - - private static DateTime? GetDateTimeFromExif(IEnumerable directories) - { - DateTime dateTime = default; - return directories - .OfType() - .FirstOrDefault()? - .TryGetDateTime(ExifDirectoryBase.TagDateTime, out dateTime) == true - ? (DateTime?) dateTime - : null; - } - - private static DateTime? GetDateTimeFromMp4(IEnumerable directories) - { - DateTime dateTime = default; - return directories - .OfType() - .FirstOrDefault()? - .TryGetDateTime(QuickTimeMovieHeaderDirectory.TagCreated, out dateTime) == true - ? (DateTime?) dateTime - : null; - } } } \ No newline at end of file diff --git a/PhotoRenamer/appsettings.json b/PhotoRenamer/appsettings.json index 26abaa0..d44ce81 100644 --- a/PhotoRenamer/appsettings.json +++ b/PhotoRenamer/appsettings.json @@ -1,4 +1,4 @@ { - "Source": "\\\\micro\\photo\\Oneplus5", - "Target": "\\\\micro\\photo\\Oneplus5" + "Source": "C:\\Users\\Holger\\Desktop\\2013-08-01", + "Target": "C:\\Users\\Holger\\Desktop\\Oneplus5" } \ No newline at end of file