Winapi 我的VC&x2B+;代码无法创建目录

Winapi 我的VC&x2B+;代码无法创建目录,winapi,Winapi,我正在使用Windows8.1。我在代码中调用了API CreateDirectory。但它失败了。我还使用GetLastError获取了最后一个错误代码。 我的密码在这里。我得到错误代码3。请帮我找出我的错误所在。对不起,如果有任何一点是不完整的/ SYSTEMTIME sysTime; GetLocalTime(&sysTime); CString sFullPath; sFullPath.Format("%s\\%d", sRecPath, sysTime.wYear);

我正在使用Windows8.1。我在代码中调用了API CreateDirectory。但它失败了。我还使用GetLastError获取了最后一个错误代码。 我的密码在这里。我得到错误代码3。请帮我找出我的错误所在。对不起,如果有任何一点是不完整的/

SYSTEMTIME sysTime;
GetLocalTime(&sysTime);

CString sFullPath;

sFullPath.Format("%s\\%d", sRecPath, sysTime.wYear); 

BOOL bRes = CreateDirectory(sFullPath, NULL);
int nErrorCode = GetLastError();

首先,您正在错误地检查错误。如中所述,故障由返回值指示。只有当
bRes
为false时,
GetLastError
返回的值才有意义。所以你应该写:

if CreateDirectory(...)
    DWORD err = GetLastError();
还要注意,
GetLastError
返回一个无符号的
DWORD
,而不是
int

假设
CreateDirectory
确实失败并且
3
的错误代码准确,则错误代码为
error\u PATH\u NOT\u FOUND
,如下所述:

CreateDirectory("C:\\ParentDir1\\ParentDir2\\MyNewDir", NULL)
系统找不到指定的路径

这很可能意味着
sFullPath
中指定的路径的某些部分不存在。请注意,
CreateDirectory
不会为您创建目录树。它只会在现有目录中创建一个新的目录对象

例如,假设您正在尝试创建如下目录:

CreateDirectory("C:\\ParentDir1\\ParentDir2\\MyNewDir", NULL)
现在,如果
C:\ParentDir1\ParentDir2
已经存在,那么
CreateDirectory
将成功。但是,如果
C:\ParentDir1\ParentDir2
不存在,则
CreateDirectory
将失败,
GetLastError
将返回
ERROR\u PATH\u not\u FOUND

这甚至在中被显式调用,表示函数将失败,错误代码将为
error\u PATH\u NOT\u FOUND
,如果:

一个或多个中间目录不存在;此函数仅在路径中创建最终目录

您可以通过检查
sFullPath
的值来取得进展


我很想知道你对这个函数的文档阅读得有多仔细。我的免费建议是确保您仔细阅读文档。如果这有助于你理解,请读两遍。

首先,你检查错误的地方。如中所述,故障由返回值指示。只有当
bRes
为false时,
GetLastError
返回的值才有意义。所以你应该写:

if CreateDirectory(...)
    DWORD err = GetLastError();
还要注意,
GetLastError
返回一个无符号的
DWORD
,而不是
int

假设
CreateDirectory
确实失败并且
3
的错误代码准确,则错误代码为
error\u PATH\u NOT\u FOUND
,如下所述:

CreateDirectory("C:\\ParentDir1\\ParentDir2\\MyNewDir", NULL)
系统找不到指定的路径

这很可能意味着
sFullPath
中指定的路径的某些部分不存在。请注意,
CreateDirectory
不会为您创建目录树。它只会在现有目录中创建一个新的目录对象

例如,假设您正在尝试创建如下目录:

CreateDirectory("C:\\ParentDir1\\ParentDir2\\MyNewDir", NULL)
现在,如果
C:\ParentDir1\ParentDir2
已经存在,那么
CreateDirectory
将成功。但是,如果
C:\ParentDir1\ParentDir2
不存在,则
CreateDirectory
将失败,
GetLastError
将返回
ERROR\u PATH\u not\u FOUND

这甚至在中被显式调用,表示函数将失败,错误代码将为
error\u PATH\u NOT\u FOUND
,如果:

一个或多个中间目录不存在;此函数仅在路径中创建最终目录

您可以通过检查
sFullPath
的值来取得进展


我很想知道你对这个函数的文档阅读得有多仔细。我的免费建议是确保您仔细阅读文档。如果这有助于你理解,请读两遍。

首先,你检查错误的地方。如中所述,故障由返回值指示。只有当
bRes
为false时,
GetLastError
返回的值才有意义。所以你应该写:

if CreateDirectory(...)
    DWORD err = GetLastError();
还要注意,
GetLastError
返回一个无符号的
DWORD
,而不是
int

假设
CreateDirectory
确实失败并且
3
的错误代码准确,则错误代码为
error\u PATH\u NOT\u FOUND
,如下所述:

CreateDirectory("C:\\ParentDir1\\ParentDir2\\MyNewDir", NULL)
系统找不到指定的路径

这很可能意味着
sFullPath
中指定的路径的某些部分不存在。请注意,
CreateDirectory
不会为您创建目录树。它只会在现有目录中创建一个新的目录对象

例如,假设您正在尝试创建如下目录:

CreateDirectory("C:\\ParentDir1\\ParentDir2\\MyNewDir", NULL)
现在,如果
C:\ParentDir1\ParentDir2
已经存在,那么
CreateDirectory
将成功。但是,如果
C:\ParentDir1\ParentDir2
不存在,则
CreateDirectory
将失败,
GetLastError
将返回
ERROR\u PATH\u not\u FOUND

这甚至在中被显式调用,表示函数将失败,错误代码将为
error\u PATH\u NOT\u FOUND
,如果:

一个或多个中间目录不存在;此函数仅在路径中创建最终目录

您可以通过检查
sFullPath
的值来取得进展


我很想知道你对这个函数的文档阅读得有多仔细。我的免费建议是确保您仔细阅读文档。如果这有助于你理解,请读两遍。

首先,你检查错误的地方。如中所述,故障由返回值指示。只有当
bRes
为false时,