Get lastAccessTime from file

This commit is contained in:
Holger Börchers 2020-11-01 20:35:50 +01:00
parent 64a14f39c1
commit a8e89b841e
2 changed files with 50 additions and 42 deletions

View File

@ -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<MetadataExtractor.Directory> directories)
{
DateTime dateTime = default;
return directories
.OfType<ExifIfd0Directory>()
.FirstOrDefault()?
.TryGetDateTime(ExifDirectoryBase.TagDateTime, out dateTime) == true
? (DateTime?)dateTime
: null;
}
private static DateTime? GetDateTimeFromMp4(IEnumerable<MetadataExtractor.Directory> directories)
{
DateTime dateTime = default;
return directories
.OfType<QuickTimeMovieHeaderDirectory>()
.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<MetadataExtractor.Directory> directories)
{
DateTime dateTime = default;
return directories
.OfType<ExifIfd0Directory>()
.FirstOrDefault()?
.TryGetDateTime(ExifDirectoryBase.TagDateTime, out dateTime) == true
? (DateTime?) dateTime
: null;
}
private static DateTime? GetDateTimeFromMp4(IEnumerable<MetadataExtractor.Directory> directories)
{
DateTime dateTime = default;
return directories
.OfType<QuickTimeMovieHeaderDirectory>()
.FirstOrDefault()?
.TryGetDateTime(QuickTimeMovieHeaderDirectory.TagCreated, out dateTime) == true
? (DateTime?) dateTime
: null;
}
}
}

View File

@ -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"
}