1。首先请加上这些预编译
- #ifdef _WIN32
- #include <direct.h>
- #include <io.h>
- #elif _LINUX
- #include <stdarg.h>
- #include <sys/stat.h>
- #endif
- #ifdef _WIN32
- #define ACCESS _access
- #define MKDIR(a) _mkdir((a))
- #elif _LINUX
- #define ACCESS access
- #define MKDIR(a) mkdir((a),0755)
- #endif
2。函数体
- INT CreatDir(char *pszDir)
- {
- INT32 i = 0;
- INT32 iRet;
- INT32 iLen = strlen(pszDir);
- //在末尾加/
- if (pszDir[iLen - 1] != '\\' && pszDir[iLen - 1] != '/')
- {
- pszDir[iLen] = '/';
- pszDir[iLen + 1] = '\0';
- }
- // 创建目录
- for (i = 0;i < iLen;i ++)
- {
- if (pszDir[i] == '\\' || pszDir[i] == '/')
- {
- pszDir[i] = '\0';
- //如果不存在,创建
- iRet = ACCESS(pszDir,0);
- if (iRet != 0)
- {
- iRet = MKDIR(pszDir);
- if (iRet != 0)
- {
- return -1;
- }
- }
- //支持linux,将所有\换成/
- pszDir[i] = '/';
- }
- }
- return 0;
- }
由于原作者的对源字符串进行了修改,所以不适合直接传递字符串常量,否则程序崩溃。故修改如下:
- int CreatDir(char *pDir)
- {
- int i = 0;
- int iRet;
- int iLen;
- char* pszDir;
- if(NULL == pDir)
- {
- return 0;
- }
- pszDir = strdup(pDir);
- iLen = strlen(pszDir);
- // 创建中间目录
- for (i = 0;i < iLen;i ++)
- {
- if (pszDir[i] == '\\' || pszDir[i] == '/')
- {
- pszDir[i] = '\0';
- //如果不存在,创建
- iRet = ACCESS(pszDir,0);
- if (iRet != 0)
- {
- iRet = MKDIR(pszDir);
- if (iRet != 0)
- {
- return -1;
- }
- }
- //支持linux,将所有\换成/
- pszDir[i] = '/';
- }
- }
- iRet = MKDIR(pszDir);
- free(pszDir);
- return iRet;
- }
需要包含头文件:
- #include <stdlib.h>
- #include <string.h>