如何访问“Documents and Settings”文件夹?

时间:2013-05-25 18:11:35

标签: c# path access-denied getfiles

我在VS 2010中使用C#.NET 4.

当迭代某些路径时,我正在运行这一行:

files = Directory.GetFiles(path, searchPattern);

当路径是文档和设置文件夹时,我收到异常。我该如何访问它?不,我不想跳过文件夹试试并抓住。我希望能够以某种方式访问​​它。

编辑:我有一个跟进问题。正如我告诉过你的那样,我正在迭代这些路径。有没有办法使用Environment.GetFolderPath但是根据我正在检查的路径以某种方式识别正确的特殊文件夹?

3 个答案:

答案 0 :(得分:8)

你必须像这样使用

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

访问MyDocuments文件夹。

答案 1 :(得分:5)

来自Environment.SpecialFolder

  

系统特殊文件夹是Program Files等文件夹,   程序,系统或启动,包含公共信息。   特殊文件夹由系统默认设置,或由   用户,安装Windows版本时。

     

GetFolderPath方法返回与此关联的位置   列举。这些文件夹的位置可以具有不同的值   在不同的操作系统上,用户可以更改一些   位置和位置已本地化。

只需使用

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

在我的计算机中,它返回C:\Users\Soner\Documents

  

有没有办法使用Environment.GetFolderPath但以某种方式表示   根据我目前的路径,正确的speical文件夹   检查?

由于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
}

答案 2 :(得分:0)

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

在Visual Studio中:

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

单击它后,将在项目的属性文件夹app.manifest下创建一个文件,一旦创建该文件,您可以取消选中启用ClickOnce安全设置选项

打开该文件并更改此行:

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

到:

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

这将使程序需要管理员权限,并且它将保证您有权访问该文件夹。