#include"path.h" void GetCurrentDirectory(wstring &out) { HMODULE hmodule; hmodule = GetModuleHandleW(NULL); WCHAR path[MAX_PATH]; int i = GetModuleFileNameW(hmodule, path, MAX_PATH); for (; i >=0 ; i--) { if (path[i] == '\\' || path[i] == '/') { path[i + 1] = 0; break; } } out = path; } void GetFileName(wstring& fullPath, wstring& fileName) { for(int i = fullPath.size(); i>=0;i--) { if( fullPath[i] == '\\' || fullPath[i] == '/' ) { fileName = fullPath.substr(i+1); return ; } } fileName = fullPath; } void GetFileName(string& fullPath, string& fileName) { for(int i = fullPath.size(); i>=0;i--) { if( fullPath[i] == '\\' || fullPath[i] == '/' ) { fileName = fullPath.substr(i+1); return ; } } fileName = fullPath; } BOOL CreateDirectoryEx(LPCTSTR lpszCreatePath) { WCHAR szCreatePathTemp[MAX_PATH]; lstrcpy(szCreatePathTemp, lpszCreatePath); if(szCreatePathTemp[wcslen(szCreatePathTemp)-1]=='\\') { szCreatePathTemp[wcslen(szCreatePathTemp)-1]='\0'; // 先删除最后的“\” } WCHAR szTemp[MAX_PATH] = L""; // 临时缓存 // 查找路径分隔符号'\' WCHAR *p = wcschr(szCreatePathTemp, '\\'); // 第一次的出现位置(地址) if (p != NULL) { p = wcschr(p+1, '\\'); // 第二次位置, 如果是NULL 则说明是一级目录, 如: c:\path 这样如果该目录不存在会直接创建该目录 } while (p != NULL) // 之后的位置(要能进入此循环, 至少是二级目录, 如: c:\一级目录\二级目录\...) { wcsncpy (szTemp, szCreatePathTemp, p-szCreatePathTemp); // 如: e:\1 if (!IsPathExist(szTemp)) // 如果不存在, 则一路创建到倒数第二个目录 { // 测试 if (!CreateDirectory(szTemp, NULL)) { //printf("创建目录%s失败!错误代码: %d\n", szTemp, GetLastError()); return FALSE; } printf("已成功创建目录:%s\n", szTemp); // 创建该层目录, 之后一路往下创建不用判断 p = wcschr(p+1, '\\'); // 下一级子目录 while( p != NULL ) { wcsncpy(szTemp, szCreatePathTemp, p-szCreatePathTemp); // 如: e:\1\2 // 测试 if (!CreateDirectory(szTemp, NULL)) { //printf("创建目录%s失败!错误代码: %d\n", szTemp, GetLastError()); return FALSE; } //printf("已成功创建目录:%s\n", szTemp); p = wcschr(p+1, '\\'); } } if ( p != NULL ) // 防止上面内层的while { p = wcschr(p+1, '\\'); // 下一级子目录 } } if (!IsPathExist(lpszCreatePath)) // 如果目录不存在, 则创建目录.(也是创建最后一个目录) { // 测试 if (!CreateDirectory(lpszCreatePath, NULL)) { //printf("创建目录%s失败!错误代码: %d\n", lpszCreatePath, GetLastError()); return FALSE; } //printf("已成功创建目录:%s\n", lpszCreatePath); } return TRUE; } // 判断目录(不能用来查询根目录,否则总是失败.)是否存在的函数 BOOL IsPathExist(LPCTSTR lpszPath) { WCHAR szTemp[MAX_PATH]; wcscpy_s(szTemp, MAX_PATH ,lpszPath); BOOL bExist; // 最后结果,表示目录是否存在 if(szTemp[wcslen(lpszPath)-1]=='\\') { szTemp[wcslen(lpszPath)-1]='\0'; // 先删除最后的“\” } WIN32_FIND_DATA wfd; // 查找 HANDLE hFind = FindFirstFile(szTemp, &wfd); if(hFind == INVALID_HANDLE_VALUE) { bExist = FALSE; // 没有找到配备,目录肯定不存在 } else { if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) // 检查找到的结果是否目录 bExist = TRUE; // 是目录,目录存在 else bExist = FALSE; // 是文件,目录不存在 FindClose(hFind); } // debug //printf("执行IsPathExist()完毕!\n"); return bExist; }