DirectoryInfo.GetFiles() не возвращает все файлы на рабочий стол (исключая ярлыки)

У меня есть listBox1, который должен отображать все файлы на моем рабочем столе, для этого я использовал следующий метод.

string filepath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
DirectoryInfo path = new DirectoryInfo(filepath);

foreach (var file in path.GetFiles())
{
    listBox1.Items.Add("File : " + file.Name);
}

Он работает, но по какой-то причине не отображает некоторые ярлыки, отображает несколько ярлыков, но большинство из них не отображаются. Я понятия не имею, почему это происходит


person John    schedule 12.11.2013    source источник
comment
В чем вопрос?   -  person asawyer    schedule 12.11.2013
comment
@asawyer подразумевает вопрос, почему это происходит?   -  person Dialecticus    schedule 12.11.2013
comment
Можете ли вы привести пример ярлыка, который отображается в этом списке по сравнению с отсутствует?   -  person Arran    schedule 12.11.2013
comment
Будет, расширение будет .lnk   -  person Sriram Sakthivel    schedule 12.11.2013
comment
Я предполагаю, что на рабочем столе «Все пользователи» также есть ярлыки.   -  person D Stanley    schedule 12.11.2013
comment
Какие файлы не отображаются? Если вы откроете командную строку и перейдете в каталог Desktop, что выведет dir? Если GetFiles возвращает некоторые ярлыки, но не все, что отображается на вашем рабочем столе, мое первоначальное ощущение будет заключаться в том, что оболочка Windows объединяет файлы из каталога рабочего стола с некоторыми другими настройками для создания отображения, т. е. на дисплее могут отображаться вещи, которых нет в каталог рабочего стола.   -  person matt    schedule 12.11.2013
comment
Вы пробовали info.GetFileSystemInfos ? Я думаю, что все возвращается.   -  person nawfal    schedule 12.11.2013
comment
@Dialecticus Конечно, я умею читать между строк, но я не прихожу в SO, чтобы играть в 20 вопросов. Джон Пожалуйста, найдите время, чтобы написать четкие краткие вопросы.   -  person asawyer    schedule 12.11.2013


Ответы (1)


Вероятно, вам не хватает ярлыков на рабочем столе «Все пользователи»:

string filepath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
DirectoryInfo path = new DirectoryInfo(filepath);

foreach (var file in path.GetFiles())
{
    listBox1.Items.Add("File : " + file.Name);
}

//  Get files in the "common" desktop
filepath = Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory);
path = new DirectoryInfo(filepath);

foreach (var file in path.GetFiles())
{
    listBox1.Items.Add("File : " + file.Name);
}

Вы можете провести рефакторинг, чтобы объединить общий код, если это сработает.

person D Stanley    schedule 12.11.2013
comment
Это работает, я никогда не знал, что рабочим столом манипулирует рабочий стол всех пользователей. Спасибо - person John; 12.11.2013