/// <summary> /// Processes a single file in an input directory /// </summary> /// <param name="inputFile">File to process</param> /// <param name="outputDirectory">Directory to put processed file to</param> private void ProcessSingleFile(FileInfo inputFile, string outputDirectory) { FileKind fileKind = ClassifyFile(inputFile.Extension.ToLower()); string subDirectory = fileKind.GetAttributeOfType <DescriptionAttribute>().Description; string destinationPath = string.Empty; try { destinationPath = m_FileProcessorFactory.ProvideProcessorForFile(fileKind).Process(inputFile, fileKind, outputDirectory); } catch (FileProcessorException) { destinationPath = m_FileProcessorFactory.ProvideProcessorForFile(FileKind.Unrecognized).Process(inputFile, FileKind.Unrecognized, outputDirectory); } catch (Exception e) { OnFileFailed(new FileEventArgs(inputFile.Name, subDirectory, e.Message)); } if (File.Exists(destinationPath)) { OnFileFailed(new FileEventArgs(inputFile.Name, subDirectory, $"{inputFile.Name} already exists in {subDirectory}")); } else { File.Copy(inputFile.FullName, destinationPath, false); OnFileCopied(new FileEventArgs(inputFile.Name, subDirectory)); } }
public string GetExpectedPath(FileKind requiredFileKind) { var path = System.IO.Path.Combine( (requiredFileKind == FileKind.JpegImage || requiredFileKind == FileKind.RawImage ? DateDigitized.Date.ToString("yyyy_MM_dd") : DateCreated.Date.ToString("yyyy_MM_dd")), requiredFileKind.GetAttributeOfType <DescriptionAttribute>().Description, FileName ); return(path); }
public override string Process(FileInfo inputFile, FileKind fileKind, string outputDirectory) { DateTime dateTimeTaken = DateTime.Now; try { var metadataDirectories = ImageMetadataReader.ReadMetadata(inputFile.FullName); try { var tagCollection = metadataDirectories.OfType <MetadataExtractor.Formats.QuickTime.QuickTimeMovieHeaderDirectory>().FirstOrDefault(); dateTimeTaken = tagCollection.GetDateTime(MetadataExtractor.Formats.QuickTime.QuickTimeMovieHeaderDirectory.TagCreated); } catch (MetadataException) { try { var tagCollection = metadataDirectories.OfType <MetadataExtractor.Formats.QuickTime.QuickTimeMetadataHeaderDirectory>().FirstOrDefault(); dateTimeTaken = tagCollection.GetDateTime(MetadataExtractor.Formats.QuickTime.QuickTimeMetadataHeaderDirectory.TagCreationDate); } catch (MetadataException) { // if no DateTime tag found - try to guess the date from file name var dateFileNamePart = inputFile.Name.Split('_')[0]; dateTimeTaken = DateTime.ParseExact(dateFileNamePart, "yyyyMMdd", CultureInfo.InvariantCulture); } } catch (Exception) { throw; } return(CreateDestinationPath(outputDirectory, dateTimeTaken.Date.ToString("yyyy_MM_dd"), fileKind.GetAttributeOfType <DescriptionAttribute>().Description, inputFile.Name)); } catch (Exception e) { throw new FileProcessorException($"Cannot read EXIF metadata from {inputFile.FullName}", e); } }
/// <inheritdoc /> public override string Process(FileInfo inputFile, FileKind fileKind, string outputDirectory) { return(CreateDestinationPath(outputDirectory, inputFile.LastAccessTime.Date.ToString("yyyy_MM_dd"), fileKind.GetAttributeOfType <DescriptionAttribute>().Description, inputFile.Name)); }
/// </<inheritdoc/> public override string Process(FileInfo inputFile, FileKind fileKind, string outputDirectory) { var dateString = ReadDateFromFile(inputFile); return(CreateDestinationPath(outputDirectory, dateString, fileKind.GetAttributeOfType <DescriptionAttribute>().Description, inputFile.Name)); }