Получить имена всех файлов в пути

1

Я получаю сообщение об ошибке Доступ к пути... отрицается при попытке прочитать файлы по указанному пути. Код, демонстрирующий ошибку, приведен ниже:

string path = "D:\\Study\\Прога 4 семестр\\Курсач\\tests";
StreamReader sr = new StreamReader(path);
while(!sr.EndOfStream)
{
    string s = Path.GetFileNameWithoutExtension(path);
    listBox1.Items.Add(s);
}
sr.Close();

Что именно не так с кодом, что ошибка возникает? Как достичь своей цели?

Теги:

3 ответа

4

Используйте Directory.EnumerateFiles, чтобы получить все файлы в каталоге, а затем проецировать каждый путь к файлу:

var names = Directory.EnumerateFiles(path)
                     .Select(f => Path.GetFileNameWithoutExtension(f));

Или даже более короткий путь:

Directory.EnumerateFiles(path).Select(Path.GetFileNameWithoutExtension);
  • 0
    Для этого требуется .NET v4 или выше, чтобы использовать Directory.EnumerateFiles .
  • 0
    @BrianOliver да, это так - это новый метод, который перечисляет имена файлов без помещения их в массив. .NET v4 здесь с 2010 года, поэтому я считаю, что это не проблема
Показать ещё 1 комментарий
2

К сожалению, вы используете неправильный синтаксис. StreamReader будет читать файл, он не будет извлекать файл. Вам следует использовать функциональность Directory из System.IO.

Пример:

string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
string[] files = Directory.GetFiles(path);
foreach(string item in files)
     Console.WriteLine(item);

Это фактически приведет к загрузке файлов.

Вторичный пример:

 var path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
 var file = Directory.EnumerateFiles(path, "*.*", SearchOption.AllDirectories)
      .Select(Path.GetFileName);

В Microsoft Developer Network есть несколько потрясающих статей по различным подходам для обработки файлов или каталогов из системы.

0

Вы можете использовать Directory который имеет метод GetFiles(String) (+ 2 overloads) для перечисления и обработки файлов в старых версиях.NET Framework.

string path = "D:\\Study\\Прога 4 семестр\\Курсач\\tests";
string[] fileNames = Directory.GetFiles(path);
for(int i  = 0; i < fileNames.Length; i++)
{
    string fileName = Path.GetFileNameWithoutExtension(path + "\\" + fileNames[i]);
    listBox1.Items.Add(fileName);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню