2013-04-13 4 views
0

Я хотел бы узнать, как получить и сохранить все имена файлов в папке в список.Как получить все файлы в папке?

Я искал постов, и это то, что я до сих пор:

private void btnSort_Click(object sender, EventArgs e) 
{ 
     //if (Directory.Exists(Path)) 
     foreach (string file in Directory.EnumerateFiles(FilePath)) 
     { 
      NoOfFiles++; 
      FileNames.Add(file); 
      //Should implement adding something that converts lower case letters to upper. 
      Directory.CreateDirectory(FilePath + "\\" + file[0]); 
     } 
} 

Он работает в определенной степени, но я хотел бы создать каталог с именем с первой буквой файла (Например, RndFile.txt), а не путь к файлу (например, C:\\something\\something\\RndFile.txt).

Поэтому я хотел бы сохранить эту информацию внутри списка.

Однако я не могу только получить эту информацию или удалить ненужные части.

Спасибо! Shivam

P.S. Для людей, которые заинтересованы, это для Проекта A-Level Computing. Я создаю простую, плохо закодированную программу для сортировки файлов в соответствии с их первой буквой. Я делаю это плохо, чтобы спросить моего учителя, если это будет хорошей идеей для этого или нет.

ответ

0

Не уверен, если я правильно понял вашу проблему.

Пространство имен Path содержит некоторые полезные функции. Я думаю, вы хотите

Path.GetFileNameWithoutExtension() - и это дает вам только имя файла. Затем вы можете обработать его как строку и

Substring(0,1) чтобы получить первую букву.

0

DirectoryInfo Используйте вместо Directory:

DirectoryInfo dir = new DirectoryInfo("c:"); 
FileInfo[] files = dir.GetFiles(); 
0

FileInfo объект в System.IO дает имя файла по имени объекта:

 private void btnSort_Click(object sender, EventArgs e) 
    { 
      DirectoryInfo di = new DirectoryInfo("path"); 
      FileInfo[] fi = di.GetFiles(); 
      foreach (FileInfo item in fi) 
      { 
       string filename = item.Name; 
       string fullname = item.FullName; 
      } 
    } 
0
private static string[] GetFileNames(string path, string filter) 
    { 
     string[] files = Directory.GetFiles(path, filter); 
     for (int i = 0; i < files.Length; i++) 
     { 
      files[i] = Path.GetFileName(files[i]); 

     } 
     return files; 
    } 

Вызов этой функции в загрузке страницы

string[] myFiles = GetFileNames("D:\\folderName", "*.txt"); 

myFiles массив теперь содержит имена всех файлов STORD внутри папке.
Для сортировки имен файлов, просто отсортировать файлы массива

Array.Sort(myFiles); 
0

Ваша работа это совершенно правильно, вам просто нужно добавить функциональные возможности, предоставляемые class Path к вашей петле

private void btnSort_Click(object sender, EventArgs e) 
{ 
    foreach (string file in Directory.EnumerateFiles(FilePath)) 
    { 
     string fileName = Path.GetFileName(file); 
     string newDir = Path.Combine(FilePath, fileName[0]); 
     if(!Directory.Exists(newDir)) 
      Directory.CreateDirectory(newDir); 

     // If you still need to store the filenames in a list you could add 
     FileNames.Add(fileName); 
     // but no need to keep a counter variable, you could Always get that value 
     // using FileNames.Count after the loop ends... 

    } 
} 
Смежные вопросы