【问题标题】:Windows 7 insists folder does not exist when it doesWindows 7坚持文件夹不存在
【发布时间】:2012-05-03 19:52:57
【问题描述】:

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

我写了这段 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() 调用之一。此文件夹名称的生成效果并不差。是真的。

它不仅是真实的,而且我可以在 Explorer 的 GUI 中导航到它:

GUI Lets Me Navigate There

奇怪的是,如果您在 CMD 中导航到该文件夹​​,它会显示在 DIR 中,但如果您在获得文件夹名称建议之前按 TAB 键,它不会让您 CD 进入其中。我会发布第三个链接,但这个东西不会让我,因为我是新人。

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

【问题讨论】:

  • 该文件夹名称中是否有|
  • 我以为是光标,目录名以空格结尾。

标签: c# windows-7 file-io


【解决方案1】:

您的路径似乎包含|。这是一个非法字符,就正常的 Win32 API 而言,但就 NT API 而言不是。

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

所以你可能需要下拉到NT APIs 来处理这个问题。

【讨论】:

    【解决方案2】:

    该目录名称的末尾是否有空格?看起来你拍摄的 Explorer 中有。我认为这是不允许的,某些工具可能正在修剪空白,这就是导致您不匹配的原因。

    【讨论】:

    • 是的,我认为是最后的空间。查看第一条错误消息。空间已被修剪
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-14
      • 2011-01-15
      • 2013-01-25
      • 1970-01-01
      • 2010-12-10
      相关资源
      最近更新 更多