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

时间:2017-10-26 15:10:20

标签: c# dictionary pdf

我正在尝试查找目录中的所有.pdf个文件,然后将路径保存在文本文件中。我正在搜索文件的目录包含很多子文件夹,它包含超过50,000个pdf文件。

如果我搜索的文件夹少于40,000个pdf文件,则下面的代码可以正常工作。我已经能够创建字典并将其保存到38,199路径的文件中。

我尝试过使用Directory.EnumerateFiles()Directory.GetFiles()并且都给了我相同的错误。我说错误是因为我看到了两个不同的错误。

错误1(见图片)指向partsDictionary.Add(name, file);

知道可能出现什么问题吗?

    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:

enter image description here

错误2:

enter image description here

1 个答案:

答案 0 :(得分:1)

重复键的问题是由搜索到的具有相同名称的子文件夹中的某个文件引起的。添加第一个文件的名称很好,但是当您在另一个文件夹中找到具有相同名称的第二个文件时,您将获得异常。

我不知道你是否真的需要一本字典用于其他作品,但如果你不需要它,但你只想写出一个文件,那么你可以用这种方式修复方法: / p>

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");
}