无法使用元数据提取器 2.4.3 确定文件格式

问题描述

我正在尝试制作一个程序,使用元数据提取器 2.4.3 自动图片从 SD 卡复制和排序到外部硬盘驱动器 我似乎没有发现任何问题,但每次运行代码时,都会提示一个未处理的异常。

错误如下:

Unhandled Exception: MetadataExtractor.ImageProcessingException: File format Could not be determined 
  at MetadataExtractor.ImageMetadataReader.ReadMetadata(Stream stream)
  at MetadataExtractor.ImageMetadataReader.ReadMetadata(String filePath)
  at file_sorter.File..ctor(String filepath) in 
  C:\Users\ropra\Documents\file_sorter\file_sorter\File.cs:line 27
  at file_sorter.Program.Main(String[] args) in 
  C:\Users\ropra\Documents\file_sorter\file_sorter\Program.cs:line 27

代码如下:

Program.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MetadataExtractor;

namespace file_sorter
{

class Program
{
    static void Main(string[] args)
    {
        // Define paths
        string sandisk = @"Z:/Images/RAW";
        string sd = @"Y:/DCIM/100_FUJI";

        // Count elements in sd 
        string[] photoPaths = System.IO.Directory.GetFiles(sd);
        Console.WriteLine("Counting elements in SD card...");

        //  Create object array
        File[] photos = new File[photoPaths.Count()];

        for (int i = 0; i < photos.Count(); i++)
        {
            photos[i] = new File(photoPaths[i]);
        }

        //  Create tree and copy files
        foreach (var item in photos)
        {
            string fileName = item.filename;
            string sourcePath = item.sourcepath;
            string targetPath = sandisk + "/" + item.year + "/" + item.month + "/" + item.day;
            string sourceFile = System.IO.Path.Combine(sourcePath,fileName);
            string destFile = System.IO.Path.Combine(targetPath,fileName);

            Console.WriteLine("Now copying: {0} into {1}",fileName,targetPath);

            System.IO.Directory.CreateDirectory(targetPath);
            System.IO.File.copy(sourceFile,destFile,true);


        }
    }
}
}

文件.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MetadataExtractor;

namespace file_sorter
{
    public class File
    {
    public string filename;
    public string path;
    public string year;
    public string month;
    public string day;
    public string sourcepath;

    public File(string filepath)
    {
        path = filepath;
        filename = path.Substring(path.LastIndexOf("\\") + 1);
        sourcepath = path.Substring(0,path.LastIndexOf("\\"));

        string rawDate = "";

        var Metadata = ImageMetadataReader.ReadMetadata(path);

        for (int i = 0; i < Metadata.Count(); i++)
        {
            for (int j = 0; j < Metadata[i].TagCount; j++)
            {
                if (Metadata[i].Name == "Exif IFD0" && Metadata[i].Tags[j].Name == "Date/Time")
                {
                    rawDate = Metadata[i].Tags[j].Description;
                }
            }
        }

        int separator = rawDate.IndexOf(":");
        year = rawDate.Substring(0,separator);
        string sub = rawDate.Substring(separator + 1);
        separator = sub.IndexOf(":");
        month = sub.Substring(0,separator);
        sub = sub.Substring(separator + 1);
        separator = sub.IndexOf(" ");
        day = sub.Substring(0,separator);
    }

    public void ShowFormatedDate()
    {
        Console.WriteLine("Path: {0}",path);
        Console.WriteLine("File: {0}",filename);
        Console.WriteLine("Dir: {0}",sourcepath);
        Console.WriteLine("Year: {0}",year);
        Console.WriteLine("Month: {0}",month);
        Console.WriteLine("Day: {0}",day);
        Console.WriteLine("");
    }
}
}

提前致谢。

解决方法

好的,因此放弃并手动整理所有文件后,我遇到了一个 .xml 文件,其中包含单个 .RAF 文件的元数据,我猜是我的相机把它放在那里。

此程序不处理 MetadataExtractor 不受支持的文件,因此存在问题。

,

ImageProcessingException:无法确定文件格式

这个异常意味着库没有将它提供的文件识别为它知道如何读取的任何东西。例如,如果您将文本文件提供给库,您将看到此异常。

也许您可以捕获此异常类型并为此类文件使用不同的代码路径。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...