2014-01-21 78 views
-1

我有一個文件夾中有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

如果你能指出我們的答案,它將不勝感激 –

+0

完全不清楚你想要做什麼。請澄清。 – tnw

+0

如果有人能指出我的問題的正確方向,將不勝感激。 – TJF

回答

0

我想我明白你的問題。請糾正我,如果我錯了:

  • 您有一組文件使用[NNNN]。[MMMM]命名約定。
  • 他們都是image/jpeg MIME類型文件。
  • 您想使用順序匹配算法對它們進行分組。

對我來說似乎很簡單。試一試吧。

  1. 獲取文件列表;確保它們是有序的。
  2. 開始循環遍歷所有文件名。
  3. 第一個文件名將啓動一個新組。
  4. 無論何時開始一個新組,您都會存儲當前組的主文件名(在我的示例中爲[NNNN])和當前索引(即[MMMM])。
  5. 如果正在分析的文件名的索引等於當前存儲的索引加上一個([MMMM]+1)並且具有相同的主文件名,則它屬於當前組。
  6. 否則,開始一個新組。

運行在您的示例代碼,這個匹配算法,你會得到這樣的:

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

2

選擇1234.*是行不通的?

+0

不可以。我編輯了一個完全沒有問題的問題。 – gnixon14

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. 
      } 
     } 
相關問題