我有一个包含28k +文件的文件夹,它会继续增长..这些文件都是jpegs,但结尾有奇怪的扩展名。例如:
1234.0001
1234.0002
1234.0011
1234.0012
5678.0021
5678.0022
我有代码以我需要的方式操作文件,但我遇到的问题是选择文件。例如,1234.0001与1234.0002 5678.0021一起使用5678.0022。如果有一定数量的扩展,我认为这将是相当简单的,但事实并非如此。我见过扩展名高达.0301的文件。
我必须将文件配对并将文件名传递给另一个进程。如果文件扩展名以1结尾,则只能与名称以2结尾的文件配对。例如:
1234.0001
1234.0002
1234.0011
1234.0012
但不是
1234.0001
1234.0012
答案 0 :(得分:2)
选择1234.*
不起作用?
答案 1 :(得分:0)
我认为最好的方法是使用for循环并获取起始名称并匹配字符串的开头。
试试这个:
List<string> listOfFiles = new List<string>();
List<string> processedNames = new List<string>();
foreach (string file in Directory.GetFiles("pathtofiles/"))
{
// Add to files list.
listOfFiles.Add(file);
}
// Run through each file and get all that match.
foreach (string file in listOfFiles)
{
// Get fileName.
string fileName = file.Split('.')[0];
if (!processedNames.Contains(fileName))
{
// All files from this point will be the same (but with the different extensions).
// get all file names like this.
foreach (string matchingFile in listOfFiles.Where((s) => s.StartsWith(fileName + ".")))
{
// This file matches the one we just got.
}
// Set that we have processed this fileName.
processedNames.Add(fileName);
// We now start a new set of Files.
}
}
答案 2 :(得分:0)
我想我理解你的问题。如果我错了,请纠正我:
image/jpeg
mime类型文件。对我而言似乎很简单。我们试一试。
[NNNN]
)和当前索引(即[MMMM]
)。[MMMM]+1
)和相同的主文件名,则它属于当前组。在您的示例代码上运行此匹配算法,您将得到:
1234.0001 <- First entry. Create group [1]
1234.0002 <- 0002 == [0001] + 1. Same group [1]
1234.0011 <- 0011 != [0002] + 1. Create group [2]
1234.0012 <- 0012 == [0001] + 1. Same group [2]
5678.0021 <- Main group ID change (5678 != 1234). Create group [3]
5678.0022 <- 0022 == [0021] + 1. Same group [3]
你最终会得到3组,每组有2个。