2014-10-26 3 views
0

Я работаю над приложением .NET 2.0, и я застрял, пытаясь перебрать все файлы в определенной папке и определить его пары файлов. (файлы с тем же именем, но разными расширениями)Определить пары файлов в каталоге, с тем же именем, но с разными расширениями

Нравится:

  • MyFile0001.jpg
  • MyFile0001.mp3
  • MyFile0001.txt

Я заинтересован в расширение имени файла, если они доступны или нет, поэтому я создал класс под названием «FileClass». В конце пары файлов будут добавлены в список list.AddRange().

Ее мой пример кода:

class FileClass 
{ 
    public string FileName { get; set; } 
    public string filePath { get; set; } 
    public bool mp3 { get; set; } 
    public bool txt { get; set; } 
    public bool jpg { get; set; } 
} 

static void Main() 
{ 
    var list = new List<FileClass>(); 

    var dirConfig = new DirectoryInfo(@"New Folder"); 
    var allFiles = dirConfig.GetFiles("*"); 

    foreach (var fileInfo in allFiles) 
    { 
     // Some code for finding file pairs... 
     // set properties, if filename extension is available 
     // and add them to a list. 
    } 
} 

Любое предложение, как справиться с этим?
, если это возможно без LINQ

ответ

3

Я хотел бы использовать Dictionary<String, List<String>> (для файла -> список расширений)
Первый шаг мог бы выглядеть следующим образом:

Dictionary<String, List<String>> d = new Dictionary<string, List<string>>(); 
var dirConfig = new DirectoryInfo(@"SomeFolder"); 
var allFiles = dirConfig.GetFiles("*"); 
foreach (var fileInfo in allFiles) 
{ 
    String coreName = Path.GetFileNameWithoutExtension(fileInfo.Name); 
    if (!d.ContainsKey(coreName)) d.Add(coreName, new List<String>()); 
    d[coreName].Add(fileInfo.Extension); 
} 
0

Что-то, как это должно работать:

class FileClass 
{ 
    public string FileName { get; set; } 
    public string filePath { get; set; } 
    public bool mp3 { get; set; } 
    public bool txt { get; set; } 
    public bool jpg { get; set; } 
} 

static void Main() 
{ 
    var list = new List<FileClass>(); 

    var dirConfig = new DirectoryInfo(@"New Folder"); 
    var allFiles = dirConfig.GetFiles("*"); 

    foreach (var fileInfo in allFiles) 
    { 
     // for purposes of matching files with different extensions, 
     // the "fileName" variable below is the file name minus the extension 
     var fileName = fileInfo.Name.Substring(0, fileInfo.Name.Length 
      - fileInfo.Extension.Length); 
     var fileClass = list.Where(fc => fc.FileName == fileName).FirstOrDefault(); 

     if (fileClass == null) 
     { 
      // this is the first version of this file name, 
      // so create a new FileClass instance and add it to the list 
      fileClass = new FileClass({ 
       FileName = fileName, 
       filePath = Path.Combine(fileInfo.DirectoryName, fileName), 
       mp3 = (fileInfo.Extension.ToLower() == ".mp3"), 
       txt = (fileInfo.Extension.ToLower() == ".txt"), 
       jpg = (fileInfo.Extension.ToLower() == ".jpg") 
      }); 
      list.Add(fileClass); 
     } 
     else 
     { 
      // a different version of this file was already found, 
      // so just set the boolean flag for this extension 
      switch (fileInfo.Extension.ToLower()) { 
       case ".mp3": fileClass.mp3 = true; break; 
       case ".txt": fileClass.txt = true; break; 
       case ".jpg": fileClass.jpg = true; break; 
      } 
     } 
    } 
} 
0

Вы можете сделать что-то подобное.

string[] arrayOfFiles= Directory.GetFiles(folderPath, "Filename.*");