列出桌面文件夹中的所有内容
本文关键字:桌面 桌面文件 文件夹 | 更新日期: 2023-09-27 17:56:19
所以事情是这样的...我正在制作一个小应用程序,它应该能够列出用户桌面上的所有内容 - 包括快捷方式。
所以我这样做:
string filepath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
DirectoryInfo d = new DirectoryInfo(filepath);
foreach (var file in d.GetFiles())
{
Console.WriteLine(file.Name);
}
这给了我以下内容:
Spotify.lnk
Desktop.ini
但是在我的桌面上,我可以看到这些:
Spotify.lnk
Desktop.ini
Microsoft Office 2010
VLC Media Player
所以我试图从中提取一些WMI信息:Win32_ShortcutFile没有任何运气。(它列出了我在桌面上没有的东西,比如Windows Live。
所以此刻我有点无知...
我希望这有任何意义!
任何指向正确方向的指针都会很棒!
干杯。
编辑:我忘了提到 - 目标节点是Windows Server 2008 SP1机器。
编辑:我也忘了提到我已经在检查桌面上的文件夹。
您需要检查公共用户的桌面。
在 .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();
}
您还需要扫描此目录:
string filepath = Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory);
如果你想得到所有停止项目,你必须检查DesktopDirectory
和CommonDesktopDirectory
var list = new DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)).GetFiles()
.Concat(new DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory)).GetFiles())
.Distinct();
foreach (var file in list)
{
Console.WriteLine(file.Name);
}
虽然许多项目来自所有用户桌面,但正如其他答案中所解释的那样,这绝不是完成您的搜索。
如果要使用与 Windows 对桌面项目相同的列表,则需要对生成的对象调用SHGetDesktopFolder
并调用EnumObjects
。 我不认为 .NET 基类库公开了此功能,但我确信有人已经编写了一个包装器来完成所有繁重的工作。 在 pinvoke.net 中已经提供了一个精简包装器(转换为 C# 的接口声明)
当您查看(但不编码)时,某些文件可能会显示,因为它们实际上位于共享桌面文件夹中。 在 Windows 7 上,这是 C:'Users'Public'Public Desktop
. 在XP上,我认为它C:'Documents and Settings'All Users'Desktop
,但我现在无法检查。