Windows 7坚持文件夹不存在时

时间:2012-05-03 19:52:58

标签: c# windows-7 file-io

请阅读整篇文章,因为整篇文章都是相关的。

我写了这个C#代码:

static void DumpDir(string dir)
{
    string[] subdirs = Directory.GetDirectories(dir);
    foreach (string subdir in subdirs)
    {
        DumpDir(subdir);
    }

    string[] files = Directory.GetFiles(dir);

}

static void Main(string[] args)
{
    string startdir = @"G:\multimedia_dump";
    dirindexstart = startdir.Split('\\').Length;
    string[] dirs = Directory.GetDirectories(startdir);

    foreach (string dir in dirs)
    {
        DumpDir(dir);
    }
}

它打开一个硬编码的目录,并以递归方式遍历其所有子目录。就是这样。就是这样。

但是,它在特定文件夹上出错:

The Error

注意这不是初始目录。请注意,如果您遵循代码,它必须在逻辑上从Directory.GetDirectories()调用之一派生。此文件夹名称生成不佳。这是真的。

它不仅是真实的,而且我可以在资源管理器的GUI中导航到它:

GUI Lets Me Navigate There

奇怪的是,如果您导航到CMD中的文件夹,它将显示在DIR中,但是如果您选择TAB直到获得文件夹名称的建议,它将不会让您进入CD。我会发布第三个链接,但这件事不会让我因为我是新人。

是什么给出的?我认为生成此文件夹的软件使用某种类型的低级NTFS调用。有没有办法以编程方式清理这些文件夹名称,或解决此错误,以便您可以访问存在但不应该存在的文件夹?

3 个答案:

答案 0 :(得分:1)

目录名末尾是否有空格?它看起来像是你的资源管理器。我不认为这是允许的,一些工具可能正在削减空白,这就是导致你不匹配的原因。

答案 1 :(得分:1)

您的路径似乎包含|。就普通的Win32 API而言,这是一个非法字符,但就NT API而言并非如此。

您可以通过在路径前加\\?\来禁用某些Win32路径限制(例如,最大路径长度约为260个字符),但看起来这不包括|

所以你可能需要下拉到NT APIs才能解决这个问题。

答案 2 :(得分:0)

我找到了一个可以清理名称的解决方案,但您必须在编辑之前执行此操作。如果您使用ROBOCOPY文件,它将从文件和文件夹名称中删除非法字符。