为何给目录路径加双引号会导致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
相关产品推荐
相关产品推荐

