C# 错误-添加到字典时,用户代码未处理ArgumentException

C# 错误-添加到字典时,用户代码未处理ArgumentException,c#,dictionary,pdf,C#,Dictionary,Pdf,我试图在目录中查找所有.pdf文件,然后将路径保存在文本文件中。我搜索文件的目录包含很多子文件夹,其中包含50000多个pdf文件 如果我搜索一个包含少于40000个pdf文件的文件夹,下面的代码会起作用。我已经能够创建字典并将其保存到一个包含38199个路径的文件中 我尝试过使用Directory.EnumerateFiles()和Directory.GetFiles()两种方法,但它们都给出了相同的错误。我说错误是因为我看到了两个不同的错误 错误1(参见图片)指向partsDictionar

我试图在目录中查找所有
.pdf
文件,然后将路径保存在文本文件中。我搜索文件的目录包含很多子文件夹,其中包含50000多个pdf文件

如果我搜索一个包含少于40000个pdf文件的文件夹,下面的代码会起作用。我已经能够创建字典并将其保存到一个包含38199个路径的文件中

我尝试过使用
Directory.EnumerateFiles()
Directory.GetFiles()
两种方法,但它们都给出了相同的错误。我说错误是因为我看到了两个不同的错误

错误1(参见图片)指向
partsDictionary.Add(名称、文件)

你知道会出什么问题吗

    public MainWindow()
    {
        InitializeComponent();
        createIndexedFileWithContentFromDirectory(@"C:\SomeFolder\");
    }

    private void createIndexedFileWithContentFromDirectory(string directory)
    {
        var files = Directory.EnumerateFiles(directory, "*.pdf*", SearchOption.AllDirectories);
        foreach (string file in files) {
            var name = System.IO.Path.GetFileNameWithoutExtension(file);
            partsDictionary.Add(name, file);
        }

       // Write dictionary to a file 
        File.WriteAllLines(@"C:\SomeFoler\indexedFiles.txt", partsDictionary.Select(x => x.Key + "=" + x.Value).ToArray());

        MessageBox.Show("Indexing Complete");
    }
错误1:

错误2:

重复密钥的问题是由搜索的子文件夹中具有相同名称的某些文件引起的。为第一个文件添加名称是可以的,但是当您在另一个文件夹中找到同名的第二个文件时,会出现异常

我不知道你是否真的需要为其他作品编写词典,但如果你不需要它,但你只想写出一个文件,那么你可以通过以下方式修复该方法:

private void createIndexedFileWithContentFromDirectory(string directory)
{
    var files = Directory.EnumerateFiles(directory, "*.pdf*", SearchOption.AllDirectories);
    File.WriteAllLines(@"C:\SomeFoler\indexedFiles.txt", 
         files.Select(x => Path.GetFileNameWithoutExtension(x) + "=" + x).ToArray());

    MessageBox.Show("Indexing Complete");
}

第一个错误非常简单。该词典中已存在具有相同密钥的项。字典键必须是唯一的。第一个错误非常清楚。不同文件夹中有两个同名文件。现在,字典的键是文件名,这会导致重复键异常,第二个异常告诉您,当WPF试图构造
主窗口时,它的构造函数抛出了一个异常(第一个异常,字典中有重复的键)。因此,修复第一个异常将修复这两个问题。您是否需要在其他位置使用字典,或者您可以简单地使用EnumerateFiles返回的列表?问题不在于填充字典时的性能,而在于您在不同的文件夹中有两个同名的文件。我会使用一个简单的列表