从其他驱动器获取用户文件夹

时间:2018-08-20 13:53:37

标签: c# special-folders

我的问题是要从所有用户的桌面删除快捷方式。

我已将Dektop文件夹从C:\Users\\[User]\Desktop更新为G:\Users\\[User]\Desktop,因为我在台式机上有一些重要数据,并且如果我重新安装Windows或Windows,我不想丢失任何用户数据Windows(任何方式)被损坏。我还更新了文档并下载了文件夹,以将数据保存到'%SystemDrive%`以外的驱动器中。

我这样做是 -打开WindowsExplorer

->右键单击“桌面”(在左侧面板中,在“快速访问”列表下)

->属性

->位置

->在文本框中写入新的桌面文件夹位置

->应用

->确定。

一切正常,但是当我想从所有用户的桌面删除快捷方式时,我只能从C驱动器获取用户文件夹。

我删除快捷方式的代码如下

foreach (var userFolder in userFolders)   //userFolders contains all sub directories of user directory
{
    var shortcutFullName = userFolder + "\\Desktop\\" + shortcutName;

    if (File.Exists(shortcutFullName))
    {
        File.Delete(shortcutFullName);
    }
}

我已经尝试过How do you get the Default Users folder

Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);

1 个答案:

答案 0 :(得分:0)

您应该能够使用Win32 API获得Desktop文件夹。

[DllImport("shell32.dll")]
static extern bool SHGetSpecialFolderPath(IntPtr hwndOwner, [Out] StringBuilder lpszPath, int nFolder, bool fCreate);

const int CSIDL_COMMON_DESKTOPDIRECTORY = 0x19;

const int CSIDL_DESKTOP = 0x0;

public static void GetCommonProfilePath()
{
    StringBuilder allUserProfile = new StringBuilder(260);
    SHGetSpecialFolderPath(IntPtr.Zero, allUserProfile, CSIDL_COMMON_DESKTOPDIRECTORY, false);

    string commonDesktopPath = allUserProfile.ToString();
    //The above API call returns: C:\Users\Public\Desktop 
    Console.WriteLine(commonDesktopPath);
 
 
    SHGetSpecialFolderPath(IntPtr.Zero, allUserProfile, CSIDL_DESKTOP = 0, false);

    // This should give you user specific path.
    Console.WriteLine(allUserProfile.ToString());
}

有关更多详细信息,请参见this blog