修复尝试打开文件/目录时提示“指向不可用的位置”/“未找到文件”的问题

修复尝试打开文件/目录时提示“指向不可用的位置”/“未找到文件”的问题

我有一堆文件夹,当我尝试浏览它们时,会显示"<directory> refers to a location that is unavailable"。在进程监控,我看到实际的错误代码是NAME_NOT_FOUND--但它们确实存在。

  • chkdsk在文件系统中未发现任何错误。
  • 它们既不是连接点也不是符号链接(通过安装链接外壳扩展

我注意到这些名字有一个共同的特征:

  • 它们最后都有一个点
  • 过去,我也遇到过与图片中名称损坏的文件/目录相同的情况:

损坏的文件夹名称。来源:https://answers.microsoft.com/en-us/windows/forum/windows_7-files/fnew-folder-refers-to-a-location-that-is/fd41d220-8183-4e19-9250-356dc1d66656

这里发生了什么事?我该如何解决这个问题?

如何在 Windows 7 中删除以点结尾的文件?提供方法删除它,但这是不能接受的,因为我需要它的内容。

  • del与该问题中所建议的不同,rename "<directory>" "<smth else>"产生相同的结果"File not found"
  • 两者都\\?\<path>不起作用(同样的错误)。

答案1

Windows API 在将路径传递给内核之前会对其进行“预处理”。关于此内容的文档不太详细:相反,MSDN 仅列出了网络限制。尤其:

不要以空格或句点结尾文件或目录名称。尽管底层文件系统可能支持此类名称,但 Windows shell 和用户界面不支持。

MAX_PATH解除限制的Unicode I/O API似乎也跳过了那个预处理。


因此,有两种修复方法:

  • 使用在底层使用 Unicode I/O API 的程序。选项包括:

  • 使用 8.3 名称访问文件/目录:

    >dir /x
    <...>
    <DIR>          58B0~1       Для П.П.
    
    >rename 58B0~1 new_name
    

使用“本机路径”——\\?\<full path>在这里没有帮助,因为对于某些cmd内置函数来说——至少dir——rename这些路径仍然需要进行预处理:

>dir "\\?\C:\Users\Me\Для П.П."
<...>
 Directory of \\?\C:\Users\Me\Для П.П

File Not Found

(请注意输出中缺少的结束点)。

相关内容