问题
这是有问题的代码
/*we ignore file size for char/block devices, sockets etc*/
if(S_ISREG(fileinfo.st_mode))
uploadfilesize= fileinfo.st_size;
}
并导致错误
error LNK2019: unresolved external symbol _S_ISREG referenced in function _operate file tool_operate.obj
以下问题引用了它们
显然S_ISREG()是一堆posix宏的一部分,显然应该告诉我们文件是否是“常规文件”,但我发现的所有示例都有linux特定的包含文件。
答案 0 :(得分:3)
在Windows上没有这样的东西,你可以使用FindFirstFile,FindNextFile win32 api,返回结构包含类似但不一样的东西。
如果你使用gcc / mingw库,他们有一个stat()模拟。您需要为该宏包含sys / stat.h。
答案 1 :(得分:3)
目前curl 7.21.5在setup.h中定义了这个:
#if !defined(S_ISREG) && defined(S_IFMT) && defined(S_IFREG)
#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
#endif
答案 2 :(得分:2)
检查了Microsoft的sys / stat.h后,我发现对@OliverZendel答案的以下修改对我来说适用于Visual Studio 2017,并希望也适用于其他编译器:
// Windows does not define the S_ISREG and S_ISDIR macros in stat.h, so we do.
// We have to define _CRT_INTERNAL_NONSTDC_NAMES 1 before #including sys/stat.h
// in order for Microsoft's stat.h to define names like S_IFMT, S_IFREG, and S_IFDIR,
// rather than just defining _S_IFMT, _S_IFREG, and _S_IFDIR as it normally does.
#define _CRT_INTERNAL_NONSTDC_NAMES 1
#include <sys/stat.h>
#if !defined(S_ISREG) && defined(S_IFMT) && defined(S_IFREG)
#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
#endif
#if !defined(S_ISDIR) && defined(S_IFMT) && defined(S_IFDIR)
#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
#endif
答案 3 :(得分:1)
在Windows上尝试添加下划线(_S_ISREG
)。在MinGW的lib中,S_ISREG
<sys/stat.h>
宏
也许您应该检查配置宏。