You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用无效路径创建目录,结果随盘符不同出现异常

盘符后缺反斜杠导致目录创建位置不一致的原因

在创建目录时如果忘记在盘符冒号后添加反斜杠(比如写成C:Temp\MyTest而非C:\Temp\MyTest),操作不会报错,但实际创建的目录位置可能和预期不符。通过以下C#代码测试可以看到,当前目录和盘符的不同会导致无效路径创建的目录位置不一致:

using System.IO;

private static void CreateWrongDirectory()
{
    var falseCPath = @"C:Temp\MyTest";
    var falseDPath = @"D:Temp\MyTest";

    var currentDirectoryD = @"D:\Temp\CurrentDirectory";
    Directory.CreateDirectory(currentDirectoryD);

    Directory.SetCurrentDirectory(currentDirectoryD);
    Console.WriteLine($"Working Directory: {Directory.GetCurrentDirectory()}");

    Console.WriteLine();
    Console.WriteLine($"Trying to create \"{falseCPath}\"");
    var di = Directory.CreateDirectory(falseCPath);
    Console.WriteLine($"Created \"{di.FullName}\"");
    di.Delete();

    Console.WriteLine($"Trying to create \"{falseDPath}\"");
    di = Directory.CreateDirectory(falseDPath);
    Console.WriteLine($"Created \"{di.FullName}\"");
    di.Delete();

    Console.WriteLine();

    var currentDirectoryC = @"C:\Temp\CurrentDirectory";
    Directory.CreateDirectory(currentDirectoryC);

    Directory.SetCurrentDirectory(currentDirectoryC);
    Console.WriteLine($"Working Directory: {Directory.GetCurrentDirectory()}");

    Console.WriteLine();

    Console.WriteLine($"Trying to create \"{falseCPath}\"");
    di = Directory.CreateDirectory(falseCPath);
    Console.WriteLine($"Created \"{di.FullName}\"");
    di.Delete();

    Console.WriteLine($"Trying to create \"{falseDPath}\"");
    di = Directory.CreateDirectory(falseDPath);
    Console.WriteLine($"Created \"{di.FullName}\"");
    di.Delete();
}

输出结果:

Working Directory: D:\Temp\CurrentDirectory

Trying to create "C:Temp\MyTest"
Created "C:\Temp\MyTest"
Trying to create "D:Temp\MyTest"
Created "D:\Temp\CurrentDirectory\Temp\MyTest"

Working Directory: C:\Temp\CurrentDirectory

Trying to create "C:Temp\MyTest"
Created "C:\Temp\CurrentDirectory\Temp\MyTest"
Trying to create "D:Temp\MyTest"
Created "D:\Temp\MyTest"

这种现象的核心原因是Windows系统对X:XXX格式路径的特殊解析规则,这类路径属于「驱动器相对路径」,解析逻辑完全依赖当前进程的活动驱动器:

  • 当路径中的盘符与当前工作目录所在的驱动器一致时,系统会将该路径解析为「当前工作目录 + 后续子路径」,比如当前目录在D:\Temp\CurrentDirectory时,D:Temp\MyTest会被解析为D:\Temp\CurrentDirectory\Temp\MyTest
  • 当路径中的盘符与当前工作目录所在的驱动器不一致时,系统会默认将该路径解析为「对应盘符的根目录 + 后续子路径」,比如当前目录在D:\Temp\CurrentDirectory时,C:Temp\MyTest会被解析为C:\Temp\MyTest

简单来说就是:

  • 写和当前驱动器相同的盘符且不带反斜杠,路径会「挂靠」在当前工作目录下
  • 写其他驱动器的盘符且不带反斜杠,路径会直接从该驱动器的根目录开始

这就导致了测试中看到的,切换当前目录所在驱动器后,相同的无效路径会创建到不同位置的现象。

内容的提问来源于stack exchange,提问作者Lemmes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 01:00:55