Пример #1
0
        /// <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));
        }