如何访问“文档和设置”文件夹?

7

我使用C# .NET 4和VS 2010。

当遍历一些路径时,我运行以下代码:

files = Directory.GetFiles(path, searchPattern);

当路径是“文档和设置”文件夹时,我会遇到异常。如何访问它?不,我不想用try和catch跳过该文件夹。我希望能够以某种方式访问它。

编辑:我有一个后续问题。正如我告诉你的那样,我正在遍历路径。是否有一种方法可以使用Environment.GetFolderPath但根据我当前检查的路径识别正确的特殊文件夹?

3个回答

10

你必须这样使用

var mydocumentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)

要访问MyDocuments文件夹。


我编辑了我的问题并添加了一个后续问题,如果您也知道答案,请告诉我。 - CodeMonkey
你可以将你的路径与 Environment.GetFolderPath(...) 进行比较,如果匹配,则可以继续执行,否则在循环结构中调用 Continue - Saravanan
我的意思是自动化某些事情。类似以下的伪代码: SpeicalFolder folder = Environment.GetSpeicalFolderByFullPath(path); - CodeMonkey
不可以使用字符串作为路径,Environment.GetFolderPath只接受枚举类型。 - Saravanan
请注意,包含“Documents and Settings”的路径适用于Windows XP,“Users...”适用于Windows 7及更高版本,我想Vista也是如此。因此,您还应该检查“OSVersion”。 - Saravanan
显示剩余2条评论

5

Environment.SpecialFolder 开始

系统特殊文件夹是诸如Program Files、Programs、System或Startup的文件夹,其中包含常见信息。特殊文件夹由系统默认设置,或者在安装Windows版本时由用户显式设置。

GetFolderPath方法返回与此枚举相关联的位置。这些文件夹的位置在不同的操作系统上可能具有不同的值,用户可以更改某些位置,并且这些位置是本地化的。

只需使用

string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
files = Directory.GetFiles(path, searchPattern);

在我的电脑上,它返回为 C:\Users\Soner\Documents

有没有办法使用 Environment.GetFolderPath 但是以某种方式识别 正在检查的路径的正确特殊文件夹?

由于 SpecialFolder 是枚举类型,您可以在循环中迭代它们的值。以下是它的样子;

public enum SpecialFolder
{
    AdminTools = 0x30,
    ApplicationData = 0x1a,
    CDBurning = 0x3b,
    CommonAdminTools = 0x2f,
    CommonApplicationData = 0x23,
    CommonDesktopDirectory = 0x19,
    CommonDocuments = 0x2e,
    CommonMusic = 0x35,
    CommonOemLinks = 0x3a,
    CommonPictures = 0x36,
    CommonProgramFiles = 0x2b,
    CommonProgramFilesX86 = 0x2c,
    CommonPrograms = 0x17,
    CommonStartMenu = 0x16,
    CommonStartup = 0x18,
    CommonTemplates = 0x2d,
    CommonVideos = 0x37,
    Cookies = 0x21,
    Desktop = 0,
    DesktopDirectory = 0x10,
    Favorites = 6,
    Fonts = 20,
    History = 0x22,
    InternetCache = 0x20,
    LocalApplicationData = 0x1c,
    LocalizedResources = 0x39,
    MyComputer = 0x11,
    MyDocuments = 5,
    MyMusic = 13,
    MyPictures = 0x27,
    MyVideos = 14,
    NetworkShortcuts = 0x13,
    Personal = 5,
    PrinterShortcuts = 0x1b,
    ProgramFiles = 0x26,
    ProgramFilesX86 = 0x2a,
    Programs = 2,
    Recent = 8,
    Resources = 0x38,
    SendTo = 9,
    StartMenu = 11,
    Startup = 7,
    System = 0x25,
    SystemX86 = 0x29,
    Templates = 0x15,
    UserProfile = 40,
    Windows = 0x24
}

我编辑了我的问题并添加了一个后续问题,如果您也知道答案,请告诉我。 - CodeMonkey
有没有自动完成它的方法? 类似以下(伪代码):SpeicalFolder folder = Environment.GetSpeicalFolderByFullPath(path);还有一些我不理解的地方。 抛出异常的路径是C:\ Documents and Settings,环境给我的路径是C:\ Users \ Yonatan \ Documents。 如何在运行时比较路径以知道抛出异常的路径实际上应该是另一个特殊路径? 我不能只做if(path ==“C:\ Documents and Settings”),因为它可能会在不同的计算机之间更改。 - CodeMonkey

0

您可以设置程序只能以管理员身份运行。

在Visual Studio中:

右键单击项目 -> 属性 -> 安全性 -> 启用ClickOnce安全性

点击后,将在项目属性文件夹下创建一个名为app.manifest的文件,创建完成后,您可以取消选中“启用ClickOnce安全性设置”选项

打开该文件并更改此行:

<requestedExecutionLevel level="asInvoker" uiAccess="false" />

目标:

 <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />

这将使程序需要管理员权限,并确保您可以访问该文件夹。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,