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

为何给目录路径加双引号会导致CreateDirectory()返回ERROR_INVALID_NAME?

问题:带双引号的路径调用CreateDirectoryW返回ERROR_INVALID_NAME,不带却正常?

我的目录路径为C:\Users\Some User\Desktop\test,由于记得不加双引号时Windows只会识别到C:\Users\Some,因此给路径添加了双引号。但调用CreateDirectoryW()时,带双引号的路径返回ERROR_INVALID_NAME错误,不带双引号却能成功创建目录,附上两段示例代码:

可正常运行的代码

#include <stdio.h>
#include <Windows.h>

int main() {
    if (!::CreateDirectoryW(L"C:\\Users\\Some User\\Desktop\\test", nullptr))
    {
        printf("ERROR %lu", ::GetLastError());
    }
    return 0;
}

返回错误的代码

#include <stdio.h>
#include <Windows.h>

int main() {
    if (!::CreateDirectoryW(L"\"C:\\Users\\Some User\\Desktop\\test\"", nullptr))
    {
        printf("ERROR %lu", ::GetLastError());
    }
    return 0;
}

原因分析

  • 双引号是命令行解析场景中用来处理含空格路径的语法,并非Windows API要求的路径格式。
  • Windows API(如CreateDirectoryW)接收的路径字符串是直接传递给文件系统的原生路径,不需要额外添加双引号。当你把双引号包含进路径参数时,系统会将其视为路径的一部分字符,但Windows的文件路径/文件名不允许包含双引号,因此会返回ERROR_INVALID_NAME(无效名称)错误。
  • 你的误解源于命令行操作习惯:比如在CMD中执行mkdir C:\Users\Some User\Desktop\test时,空格会被当作参数分隔符,导致命令解析错误,这时候才需要用双引号包裹路径。但API调用和命令行解析是完全独立的逻辑,API直接接收完整的路径字符串,不需要额外的引号处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 20:42:02