从特定目录中的所有顶级目录文件获取完整文件名并抑制发生的错误

时间:2013-08-06 04:00:22

标签: c# file directory filenames directory-listing

我从特定目录中获取顶级目录完整文件名时遇到了一个不期望的问题。 C#抛出一个错误,并没有在特定目录中列出任何内容。 但MS DOS对我的命令没有问题:*“dir C:\ windows \ prefetch \ *。pf”

Visual Basics 6 旧的“ Dir功能”也可以毫无怨言地完成。 “ Windows资源管理器”将其打开,不会向我提出任何问题。此外“Nirsofts工具套装”立即列出它没有任何问题。这些工具中没有一个需要以特殊权限运行,只需双击应用程序图标即可完成任务。

我环顾四周,在这里什么也没发现,什么会回答这个奇怪的问题。我的用户可以访问该目录,如果我使用任何其他应用程序,现在有问题为什么C#抛出 一个“未经授权的访问异常”,这很奇怪,因为我可以访问此文件夹。

我不想使用管理员权限提升我的应用程序,也不想为它创建额外的xml,以便以最高权限运行它。必须避免使用不信任的黄色升降箱。

现在我的问题:我怎么能在其他所有文件夹中列出这个文件夹中的文件名 应用可以做到这一点。 如果“ Directory.GetFiles()”失败,我需要什么代码? 框架目录类中是否有任何标志或属性允许我的应用程序访问文件,无论如何。

这里我的代码失败了(使用System.IO):

private void button1_Click(object sender, EventArgs e)
    {

        textBox1.Text = textBox1.Text.Substring(0, 0); //clear the textBox1

        //Unauthorized access exception and yellow bar in this line
        foreach(string FileX in Directory.GetFiles(Path.Combine(Environment.GetEnvironmentVariable("windir"), "prefetch"), "*.pf"))
        {
            textBox1.Text += FileX;
        }
    }

1 个答案:

答案 0 :(得分:1)

我是否正确理解您只需要带有目录名的文件名。 此代码适用于我,不需要高程。

 private void button1_Click(object sender, EventArgs e)
    {
        string folder = @"C:\windows\prefetch";
        string filemask = @"*.pf";
        string[] filelist = Directory.GetFiles(folder, (filemask));

        //now use filelist[i] for any operations. 
    }