Windows 7坚持认为文件夹不存在

本文关键字:文件夹 不存在 坚持 Windows | 更新日期: 2023-09-27 18:33:10

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

我编写了以下 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);
    }
}

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

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

错误

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

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

GUI 让我导航到那里

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

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

Windows 7坚持认为文件夹不存在

看起来您的路径包含| .就普通 Win32 API 而言,这是一个非法字符,但就 NT API 而言,这不是非法字符。

您可以通过在路径

前面加上 ''?' 来禁用某些 Win32 路径限制(例如 ~260 个字符的最大路径长度(,但看起来这不包括|

因此,您可能需要下拉到 NT API 来处理此问题。

该目录名称的末尾是否有空格?看起来在你的资源管理器镜头中有。我认为这是不允许的,某些工具可能会修剪空格,这就是导致不匹配的原因。

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