如果在多个文件夹中发现同名文件,如何在不添加同名文件的情况下创建索引文件?
下面的代码搜索一个目录,获取其中的所有pdf
并将路径写入txt
文件。我的问题是,如果在两个不同的文件夹中发现相同的文件,它会在我的index.txt文件中添加两次,导致在搜索索引文件时出现问题。
以下是我的代码
public void createIndexedFileWithContentFromDirectory(string indexPDFDocumentName, string sourceDirectory, string fileExtension)
{
bool indexFileExists = File.Exists(indexPDFDocumentName);
if (indexFileExists == false) {
var files = Directory.EnumerateFiles(sourceDirectory, fileExtension, SearchOption.AllDirectories);
File.WriteAllLines(indexPDFDocumentName, files.Select(x => System.IO.Path.GetFileNameWithoutExtension(x) + "=" + x).ToArray());
}
}
索引文件的外观如下所示
myfile1=C:\Folder1\myfile1.PDF
myfile2=C:\Folder2\myfile2.PDF
myfile3=C:\Folder3\myfile3.PDF
myfile1=C:\Folder4\myfile1.PDF
..。
请注意,myFile1
被添加了两次,因为它存在于两个不同的文件夹中。我希望能够做的是忽略一个文件,如果它已经找到,所以索引文件只包含第一个找到的文件的位置。
就像这样..。
myfile1=C:\Folder1\myfile1.PDF
myfile2=C:\Folder2\myfile2.PDF
myfile3=C:\Folder3\myfile3.PDF
myfile4=C:\Folder4\myfile4.PDF
..。
过滤并仅将找到的第一个文件添加到索引文件的最佳方式是什么,即使该文件存在于多个目录中?
编辑:是我的解决方案,它可能不是最有效的,但它工作得很好。
public void createIndexedFileWithContentFromDirectory(string indexPDFDocumentName, string sourceDirectory, string fileExtension)
{
bool indexFileExists = File.Exists(indexPDFDocumentName);
if (indexFileExists == false) {
var allFiles = Directory.EnumerateFiles(sourceDirectory, fileExtension, SearchOption.AllDirectories);
string[] allFilesArray = allFiles.Select(x => System.IO.Path.GetFileNameWithoutExtension(x) + "=" + x).ToArray();
/// This dictionary is created from the above array and it's used for filtering duplicates
var dictionaryFromArray = new Dictionary<string, string>();
dictionaryFromArray = allFilesArray.Select(s => s.Split('=')).GroupBy(a => a[0].ToUpper()).ToDictionary(e => e.Key, v => v.Select(a => a[1]).First());
File.WriteAllLines(indexPDFDocumentName, dictionaryFromArray.Select(z => z.Key + "=" + z.Value).ToArray());
MessageBox.Show("Indexing Complete");
}
}
https://stackoverflow.com/questions/50659791
复制相似问题