根据第一个文件的扩展名选择第二个文件

时间:2014-01-21 16:46:42

标签: c# file-io

我有一个包含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

3 个答案:

答案 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)

我想我理解你的问题。如果我错了,请纠正我:

  • 您有一组使用[NNNN]。[MMMM]命名约定的文件。
  • 他们都是image/jpeg mime类型文件。
  • 您希望使用顺序匹配算法对它们进行分组。

对我而言似乎很简单。我们试一试。

  1. 获取文件列表;确保他们订购。
  2. 启动循环以遍历所有文件名。
  3. 第一个文件名将启动一个新组。
  4. 每当您启动新组时,都会存储当前组的主文件名(在我的示例中为[NNNN])和当前索引(即[MMMM])。
  5. 如果要分析的文件名的索引等于当前存储的索引加上一个([MMMM]+1)和相同的主文件名,则它属于当前组。
  6. 否则,请开始一个新组。
  7. 在您的示例代码上运行此匹配算法,您将得到:

    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个。