I am trying to compile a linux written program under windows (I use mingw)
void make_directory(const char* name) {
mkdir(name1, name2);
}
There is an error:
Too Many Arguments to function 'int mkdir(const char*)'
Any idea to solve this?
对于在 mingw-w64 下构建的 Linux 编写程序,我设法摆脱了这一点:
#if (defined(_WIN32) || defined(__WIN32__))
#define mkdir(A, B) mkdir(A)
#endif
正如评论中所说,mkdir()
只接受一个论点。但是,由于不推荐使用此功能,您应该改用 _mkdir()
:
int _mkdir(const char *dirname);
int _wmkdir(const wchar_t *dirname); /* for wide-character */
如果您希望在两个系统(linux / mingw)上使用您的功能:
void make_directory(const char* name)
{
#ifdef __linux__
mkdir(name, 777); /* Or what parameter you need here ... */
#else
_mkdir(name);
#endif
}
编辑:
MinGW 实现:
_mkdir():
_CRTIMP int __cdecl __MINGW_NOTHROW _mkdir (const char*);
mkdir():
_CRTIMP int __cdecl __MINGW_NOTHROW mkdir (const char*);
两者都在 中指定io.h
,但我想最好包括在内direct.h
(包括io.h
在它的一部分中)。
我假设name1
和name2
都是您要创建的目录的名称(但见下文)。
mkdir()
创建(或尝试创建)单个目录。如果要创建两个目录,则需要调用mkdir()
两次。
更令人困惑的是,POSIXmkdir()
函数实际上有两个参数——但第二个参数不是名称。引用我系统上的手册页:
#include <sys/stat.h>
#include <sys/types.h>
int mkdir(const char *pathname, mode_t mode);
ollo 的答案中提到的_mkdir()
函数是特定于 Microsoft Windows 的,它需要一个参数;模式(即权限)在 Windows 上的工作方式与在 POSIX(Unix、Linux 等)系统上的工作方式不同。
但是你的编译器显然认为mkdir()
它只需要一个参数,这让人想知道它为什么这么认为。你用什么头文件#include
来获得mkdir
函数的声明?
正如我上面提到的,POSIXmkdir()
接受两个参数,但第二个是 a mode_t
,而不是名称。你说代码最初是为 Linux 编写的。参数是否真的称为name1
and name2
,或者您是否尝试通过更改名称来简化代码?您能否更新问题以向我们展示实际的复制和粘贴代码?