首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >哪些文件夹构成了用户的配置文件

哪些文件夹构成了用户的配置文件
EN

Stack Overflow用户
提问于 2019-04-24 03:27:46
回答 2查看 530关注 0票数 1

简短版本

是否存在与用户的整个配置文件相对应的IShellItem

或者给定所有已知的KNOWNFOLDER常量:

  • 有没有办法知道KNOWNFOLDER常量是否是用户配置文件的一部分?
  • 有没有办法枚举尚未发明的KNOWNFOLDER常量,所以我不会错过任何?

长版本

如果我想备份一个用户的整个配置文件,我当然会从

代码语言:javascript
运行
复制
SHGetFolderPath(CSIDL_PROFILE): "C:\Users\Ian"

这是显而易见的。然后,该文件夹通常会包含:

代码语言:javascript
运行
复制
C:\Users\Ian
╰── AppData
    ├── Local
    ├── LocalLow
    ╰── Roaming

其中一些其他文件夹已经作为它们自己的CSIDL常量存在

代码语言:javascript
运行
复制
C:\Users\Ian          CSIDL_Profile
╰── AppData               
    ├── Local         CSIDL_Local_AppData 
    ├── LocalLow      
    ╰── Roaming       CSIDL_AppData 

有时还会在 profile 文件夹中显示其他配置文件文件夹:

代码语言:javascript
运行
复制
C:\Users\Ian          CSIDL_Profile
├── Desktop           CSIDL_DesktopDirectoy
├── Documents         CSIDL_Personal
├── Pictures          CSIDL_MyPictures
├── Music             CSIDL_MyMusic
├── Video             CSIDL_MyVideo
├── Favorites         CSIDL_Favorites
╰── AppData               
    ├── Local         CSIDL_Local_AppData 
    ├── LocalLow      
    ╰── Roaming       CSIDL_AppData 

但这些文件夹不必在%USERPROFILE%下

Windows允许用户配置要移动到自定义位置的某些特殊文件夹:

这意味着某些文件夹实际上可以存在于"Profile“文件夹之外:

代码语言:javascript
运行
复制
C:\Users\Ian          CSIDL_Profile
╰── AppData               
    ├── Local         CSIDL_Local_AppData 
    ╰── LocalLow      

D:\Users\Ian
├── Desktop           CSIDL_DesktopDirectoy
├── Documents         CSIDL_Personal
├── Pictures          CSIDL_MyPictures
├── Music             CSIDL_MyMusic
├── Video             CSIDL_MyVideo
├── Favorites         CSIDL_Favorites
╰── AppData    
    ╰── Roaming       CSIDL_AppData 

我不知道是否可以或不能通过UI、组策略或其他方式将CSIDL值移动到其他位置:

代码语言:javascript
运行
复制
C:\Users\Ian                                            CSIDL_Profile
╰── AppData               
    ├── Local                                           CSIDL_Local_AppData 
    │   ├── Microsoft\Windows\History                   CSIDL_HISTORY          
    │   ├── Microsoft\Windows\Temporary Internet Files  CSIDL_INTERNET_CACHE
    │   ╰── Microsoft\Windows\Burn\Burn1                CSIDL_CDBURN_AREA
    ╰── LocalLow                       

D:\Users\Ian
├── Desktop           CSIDL_DesktopDirectoy
├── Documents         CSIDL_Personal
├── Pictures          CSIDL_MyPictures
├── Music             CSIDL_MyMusic
├── Video             CSIDL_MyVideo
├── Favorites                                     CSIDL_Favorites
╰── AppData    
    ╰── Roaming                                   CSIDL_AppData 
        ╰── Microsoft
            ╰── Windows               
                ├── Recent                        CSIDL_RECENT
                ├── Send To                       CSIDL_SENDTO
                ├── Start Menu                    CSIDL_STARTMENU
                │   ╰── Programs                  CSIDL_PROGRAMS
                │       ├── Startup               CSIDL_STARTUP
                │       ├── Startup               CSIDL_ALTSTARTUP
                │       ╰── Administrative Tools  CSIDL_ADMINTOOLS
                ├── Templates                     CSIDL_TEMPLATES
                ╰── Cookies                       CSIDL_TEMPLATES

我不想错过文件夹

有了所有这些CSIDL值,我可能会错过组成用户配置文件的一些文件夹。在我理想的幻想世界中,会有一个IShellItem,它将对应于用户配置文件中的所有内容。

同样,如果您查看This PC文件夹(CSIDL_DRIVES) (称为),它是一个虚拟外壳文件夹,其中包含:

代码语言:javascript
运行
复制
This PC
├── 3D Objects
├── Desktop
├── Documents
├── Downloads
├── Music
├── Pictures
╰── Videos

这很棒;它是一个虚拟文件夹,其中包含组成用户配置文件的文件夹(无论这些文件夹实际在哪里)。

不幸的是,这有两个缺点:

对于某些配置文件文件夹,它会丢失(例如,CSIDL_Favorites)

  • it会继续包含所有我的电脑 (nee PC))

此PC├──3D Objects├──桌面├──Documents├──下载├──音乐├──图片├──视频├──OS (C:)├──Develop (D:)├──DVD RW驱动器(E:)├──BD ROM驱动器(F:)╰──本地磁盘(X:)

“因此,只需备份代表每个用户文件夹的所有 CSIDLs”

我想我可以简单地查看每个CSIDL,剔除作为另一个IShellItem的子级的任何IShellItem (todo:弄清楚如何做到这一点),然后只备份这些:

代码语言:javascript
运行
复制
CSIDL_PROFILE             C:\Users\ian 
CSIDL_LOCAL_APPDATA       C:\Users\ian\AppData\Local 
CSIDL_APPDATA             C:\Users\ian\AppData\Roaming 
CSIDL_NETHOOD             C:\Users\ian\AppData\Roaming\Microsoft\Windows\Network Shortcuts 
CSIDL_PRINTHOOD           C:\Users\ian\AppData\Roaming\Microsoft\Windows\Printer Shortcuts 

CSIDL_DESKTOP             D:\Users\ian\Desktop 
CSIDL_DESKTOPDIRECTORY    D:\Users\ian\Desktop 
CSIDL_PERSONAL            D:\Users\ian\Documents 
CSIDL_MYPICTURES          D:\Users\ian\Pictures 
CSIDL_MYMUSIC             D:\Users\ian\Music 
CSIDL_MYVIDEO             D:\Users\ian\Videos 
CSIDL_FAVORITES           D:\Users\ian\Favorites 
CSIDL_COMMON_FAVORITES    D:\Users\ian\Favorites 
CSIDL_RECENT              d:\Users\ian\AppData\Roaming\Microsoft\Windows\Recent 
CSIDL_SENDTO              d:\Users\ian\AppData\Roaming\Microsoft\Windows\SendTo 
CSIDL_STARTMENU           d:\Users\ian\AppData\Roaming\Microsoft\Windows\Start Menu 
CSIDL_PROGRAMS            d:\Users\ian\AppData\Roaming\Microsoft\Windows\Start Menu\Programs 
CSIDL_STARTUP             d:\Users\ian\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 
CSIDL_ALTSTARTUP          d:\Users\ian\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 
CSIDL_ADMINTOOLS          d:\Users\ian\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Administrative Tools 
CSIDL_TEMPLATES           d:\Users\ian\AppData\Roaming\Microsoft\Windows\Templates
CSIDL_COOKIES             d:\Users\ian\AppData\Roaming\Microsoft\Windows\Cookies

CSIDL_HISTORY             d:\Users\ian\AppData\Local\Microsoft\Windows\History
CSIDL_INTERNET_CACHE      d:\Users\ian\AppData\Local\Microsoft\Windows\Temporary Internet Files
CSIDL_CDBURN_AREA         C:\Users\ian\AppData\Local\Microsoft\Windows\Burn\Burn1

问题在于CSIDL是不完整的(并且已被弃用)。例如:

没有适用于Downloads

  • there的CSIDL不适用于3D Objects

好的,我会换成现代的KNOWNFOLDERS.

这样我会得到:

  • FOLDERID_AccountPictures
  • FOLDERID_AppDataDesktop
  • FOLDERID_AppDataFavorites
  • FOLDERID_AppDataProgramData
  • FOLDERID_Objects3D
  • FOLDERID_OriginalImages
  • snip 34
  • FOLDERID_Ringtones

除非KnownFolders帮不上忙

我的枚举所有已知KNOWNFOLDER常量的方案失败了,原因有两个。

在我的应用程序编写之后创建的任何常量都将丢失-缺少备份用户配置文件数据。对于备份应用程序来说,这不是一个很好的工作。

但更重要的是,我不知道KNOWNFOLDERS是按用户的。例如:

    • GUID:GUID {1e87508d-89c2-42f0-8a7e-645a0f50ca58}
    • Display名称:虚拟类型:虚拟路径:不适用-虚拟GUID

应用程序是按用户的吗?文件夹没有文件系统路径并不意味着它不存在,或者我不能读取它,或者我不能枚举它的文件,或者我不能备份它的内容

当使用最新的(即Windows95) Shell API枚举文件和文件夹时,您可以很好地读取这些文件。

将您的手机通过USB连接到您的PC。您可以浏览这些文件,并使用IShellItem应用编程接口枚举它们-即使它们没有文件系统路径。

摘要

是否存在与用户配置文件相关的everything对应的外壳虚拟文件夹?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55818146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档