C#DIrectory.GetFiles在根文件夹

时间:2016-06-24 17:31:26

标签: c# winforms filepath

我正在编写用于设置exe文件路径和一些配置的设置代码。我正在进行测试,以确保我做得对,但得到了一个奇怪的结果。

我知道我正在搜索的文件位于C:\ ti \ uniflash_3.4 \ uniflashCLI.bat

以下代码正确找到了我想要的文件。

 var uniflashEXE = Directory.GetFiles(@"C:\ti", "uniflashCLI.bat", SearchOption.AllDirectories);

这是程序安装程序默认放置的地方,但如果它被我的用户安装到ProgramFiles中我不会感到惊讶(我不会监督安装)

为了解释这一点,我将代码更改为

 var uniflashEXE = Directory.GetFiles(@"C:\", "uniflashCLI.bat", SearchOption.AllDirectories);

但它不起作用。在UAC问题的情况下,我没有收到任何未经授权的用户异常,并且我已经尝试以管理员身份运行Visual Studio(2015社区)以确定。

此代码在表单加载(当前)中运行,并将文件路径输出到消息框,只显示文件路径。正常运行时,在表单加载之前弹出此MessageBox,表单等待我按OK以加载表单。当我将目录更改为“C:”(或C:\ - 它似乎并不重要)时,它只是绕过整个过程并只加载表单。

这是怎么回事?它不像是一个权限问题,我知道它就在那里,但当我要求它搜索整个目录时,它甚至都没有尝试。

我明白为什么搜索整个C目录会是一个糟糕的主意,但我不明白为什么它不会做任何事情。我很可能会尝试识别可能的安装位置并搜索这些目录并为安装在奇怪位置的边缘情况添加浏览选项(尽管它让我害怕这样做,因为这些特定的用户......嗯,他们不聪明)

编辑:按要求添加整个代码

    private void frmInitialSetup_Load(object sender, EventArgs e)
    {
        try
        {
            var uniflashEXE = Directory.GetFiles(@"C\:", "uniflashCLI.bat", SearchOption.AllDirectories);
            MessageBox.Show(uniflashEXE[0].ToString());
        }
        catch (UnauthorizedAccessException UAex)
        {
            MessageBox.Show(UAex.ToString());
        }
        catch(DirectoryNotFoundException DNFex)
        {
            MessageBox.Show(DNFex.ToString());
        }

    }

EDIT2:

我在try块内的两行上放置了一个断点。

当代码设置为搜索C:\ ti并且我在第二行停止并将鼠标悬停在uniflashEXE上时,它将其列为“uniflashEXE {string [1]}”并且我可以展开它以查看它包含正确的文件路径。当它设置为搜索C:\并执行相同操作时,它将被列为“uniflashEXE null”。

我认为将空值传递给消息框只是让它不显示并跳过整个部分。但是,它没有解释为什么它不是通过C:搜索。是否可以搜索最大尺寸? C:\驱动器是240 GB(确实,实际上是223),而我只有8 GB RAM。

0 个答案:

没有答案