在Desktop文件夹中列出所有内容

Rob*_*son 4 c# windows desktop c#-2.0

所以这就是......我正在创建一个小应用程序,应该能够在用户桌面上列出所有内容 - 包括快捷方式.

所以我这样做:

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

            foreach (var file in d.GetFiles())
            {
                Console.WriteLine(file.Name);
            }
Run Code Online (Sandbox Code Playgroud)

这给了我以下内容:

 Spotify.lnk  
 Desktop.ini
Run Code Online (Sandbox Code Playgroud)

但在我的桌面上我可以看到这些:

Spotify.lnk
Desktop.ini
Microsoft Office 2010
VLC Media Player
Run Code Online (Sandbox Code Playgroud)

所以我尝试从Win32_ShortcutFile中提取一些WMI信息,没有任何运气.(它列出了我在桌面上没有的东西,比如Windows Live.)

所以此刻我有点无能为力......

我希望这有任何意义!

任何正确方向的指针都会很棒!

干杯.

编辑:我忘了提到 - 目标节点是Windows Server 2008 SP1机器.

编辑:我也忘了提到我已经在桌面上检查文件夹了.

Joh*_*ner 7

您需要检查公共用户的桌面.

在.Net 4.0及更高版本中,您可以使用Environment.SpecialFolder.CommonDesktopDirectory特殊文件夹来获取该目录.

在您的机器上,可能C:\Users\Public\Desktop是您没有更改它.如果你查看那里,你应该看到该文件C:\Users\YourUserName\Desktop夹中缺少的文件.

如果您使用.net 3.5或更低版本,则CommonDesktopDirectory特殊文件夹枚举中不存在.如果是这种情况,则需要使用Win32 API调用来获取文件夹路径.

[DllImport("shfolder.dll", CharSet = CharSet.Auto)]
private static extern int SHGetFolderPath(IntPtr hwndOwner, int nFolder, IntPtr hToken, int dwFlags, StringBuilder lpszPath);
private const int MAX_PATH = 260;
private const int CSIDL_COMMON_DESKTOPDIRECTORY = 0x0019;
public static string GetAllUsersDesktopFolderPath()
{
    StringBuilder sbPath = new StringBuilder(MAX_PATH);
    SHGetFolderPath(IntPtr.Zero, CSIDL_COMMON_DESKTOPDIRECTORY, IntPtr.Zero, 0, sbPath);
    return sbPath.ToString();
}
Run Code Online (Sandbox Code Playgroud)