Path.GetFilename — попытка получить имена файлов из каталога

Мне удалось заставить этот код работать:

string[] path = Directory.GetFiles(@"c:\Users\james.krueger\Desktop\Test Folder\");

Проблема в том, что это отображает весь путь.

Этот следующий блок кода, кажется, то, что я хочу. Однако он предлагает мне сообщение об ошибке, что он не может неявно преобразовать string в string[].

Любые идеи о том, как получить имя файла в одиночку?

string[] path = Path.GetFileName(@"c:\Users\james.krueger\Desktop\Test Folder\");

string[] filePaths = path;
foreach (string element in filePaths)
{
    lb1.Items.Add(element);
}

person Jimmy K    schedule 12.03.2014    source источник
comment
Чего ты хочешь? Имя файла для каждого файла в папке?   -  person DonBoitnott    schedule 12.03.2014
comment
Да, только имя файла. В настоящее время, когда я использую Directory.GetFiles, отображается полный путь.   -  person Jimmy K    schedule 12.03.2014
comment
stackoverflow.com/questions/12524398/   -  person Pacman    schedule 12.03.2014


Ответы (3)


Вы применяете Path.GetFileName к строкам, возвращаемым Directory.GetFiles.

private void button2_Click(object sender, EventArgs e) 
{ 
    string[] path = Directory.GetFiles(@"c:\Users\james.krueger\Desktop\Test Folder\");
    foreach (string element in path)
    {
        lb1.Items.Add(Path.GetFileName(element));
    }
}

Path.GetFileName не возвращает имена файлов каталога, а просто извлекает из пути часть имени файла

Однако, если ваш lb1 представляет собой ListBox, вы можете добиться своего результата с помощью очень компактного кода, используя Linq

string folder = @"c:\Users\james.krueger\Desktop\Test Folder\";
string[] files = Directory.EnumerateFiles(folder).Select(x => Path.GetFileName(x)).ToArray();
lb1.DataSource = files;
person Steve    schedule 12.03.2014
comment
Решено, я такой тупой. Спасибо, Стив. - person Jimmy K; 12.03.2014

Path.GetFileName(@"c:\Users\james.krueger\Desktop\Test Folder\")

возвращает string. Компилятор сообщает вам, что он не может присвоить это string[].

Теперь то, что делает GetFileName, удаляет часть имени пути и возвращает только имя файла, так что это только часть решения. Вам все еще нужен вызов Directory.GetFiles.

Итак, вызовите Directory.GetFiles, а затем для каждого элемента массива, возвращаемого Directory.GetFiles, вызовите Path.GetFileName(). Например:

foreach (string name in Directory.GetFiles(dirName)
    .Select(path => Path.GetFileName(path)))
{
    lb1.Items.Add(name);
}

Или, возможно, несколько более эффективная версия с использованием IEnumerable<string> вместо string[]:

foreach (string name in Directory.EnumerateFiles(dirName)
    .Select(path => Path.GetFileName(path)))
{
    lb1.Items.Add(name);
}
person David Heffernan    schedule 12.03.2014

Path.GetFileName() возвращает string не string[].

Вам следует использовать Directory.GetFiles() вместо этого.

person Neil Knight    schedule 12.03.2014