使用winrar打包文件

来源:互联网 发布:淘宝卖家引流技巧 编辑:程序博客网 时间:2024/05/01 23:31
#include <iostream>#include <Windows.h>#include <string>#include <time.h>std::wstring GenerateBakDir(const std::wstring &srcDir){ std::wstring bakDir; if (srcDir.empty()) {  return bakDir; } time_t curTime = time(0); tm tim; localtime_s(&tim, &curTime); wchar_t format[32] = {0}; swprintf_s(format, 32, L"%d%02d%02d%02d%02d", tim.tm_year+1900, tim.tm_mon+1, tim.tm_mday, tim.tm_hour, tim.tm_min); bakDir = srcDir; bakDir += L"_"; bakDir += format; return bakDir;}int CopyDir(const wchar_t *wSrcDir, const wchar_t *wDistDir){   int iCopyFileCount = 0; if (!CreateDirectory(wDistDir, NULL)) {  if( GetLastError() == ERROR_PATH_NOT_FOUND )  {   return -1;    }     } BOOL fFinished = FALSE; wchar_t  wSrcFile[MAX_PATH]; ZeroMemory(wSrcFile, sizeof(wSrcFile)); wcscpy_s(wSrcFile, MAX_PATH-1, wSrcDir); wcscat_s(wSrcFile, L"\\*.*");     WIN32_FIND_DATA FileData; HANDLE hSearch; hSearch = FindFirstFile(wSrcFile, &FileData); if (hSearch == INVALID_HANDLE_VALUE) {  printf("FindFirstFile error, lasterror=%d\n", GetLastError());  return -1; } do {  wcscpy_s(wSrcFile, MAX_PATH, wSrcDir);  wcscat_s(wSrcFile, MAX_PATH, L"\\");  wcscat_s(wSrcFile, MAX_PATH, FileData.cFileName);  wchar_t wDistFile[MAX_PATH];  ZeroMemory(wDistFile, sizeof(wDistFile));  wcscpy_s(wDistFile, MAX_PATH, wDistDir);  wcscat_s(wDistFile, MAX_PATH, L"\\");  wcscat_s(wDistFile, MAX_PATH, FileData.cFileName);     if (CopyFile(wSrcFile, wDistFile, FALSE))  {   iCopyFileCount++;      }   }while(FindNextFile(hSearch, &FileData));   FindClose(hSearch); return iCopyFileCount;}BOOL WinRARCompress(const std::wstring &dir, unsigned long timeout){ SHELLEXECUTEINFOW info; ZeroMemory(&info, sizeof(info)); info.cbSize = sizeof(info); info.fMask = SEE_MASK_NOCLOSEPROCESS; info.hwnd = NULL; info.lpVerb = NULL; info.lpFile = L"WinRAR.exe"; std::wstring workPath; std::wstring compressDir; size_t pos = dir.find_last_of(L"\\"); if (pos == std::string::npos) {  pos = dir.find_last_of(L"/"); } if (pos != std::string::npos) {  workPath = dir.substr(0, pos);  compressDir = dir.substr(pos + 1, dir.length() - pos); } else {  return FALSE; } if (workPath.empty() || compressDir.empty()) {  return FALSE; } wchar_t wParameter[_MAX_PATH]; ZeroMemory(wParameter, sizeof(wParameter)); swprintf_s(wParameter, _MAX_PATH, L"a %s.rar %s", compressDir.c_str(), compressDir.c_str()); info.lpParameters = wParameter; info.lpDirectory = workPath.c_str(); info.nShow = SW_HIDE; info.hInstApp = NULL; BOOL bret = ShellExecuteEx(&info); if (bret) {  if (WAIT_OBJECT_0 == WaitForSingleObject(info.hProcess, timeout))  {   bret = TRUE;  } } else {  bret = FALSE; }  if (!bret) {  DWORD lasterror = GetLastError();  printf("ShellExecuteEx error, lasterror:%d\n", lasterror); } return bret;}