123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282 |
- #include "FileCore.h"
- #pragma region 文件
- bool FileCore::IsExistTheFileW(wstring filePath)
- {
- bool isExist = PathFileExistsW(filePath.c_str());
- return isExist;
- }
- bool FileCore::IsExistProductAppPath()
- {
- wstring installPath = PathCore::smPath_Install + L"\\" + Product::smName_Application;
- bool isExist = PathFileExistsW(installPath.c_str());
- if (!isExist) {
- wstring installPathnoexe = PathCore::smPath_Install + L"\\" + L"PDFReaderProWin";
- isExist = PathFileExistsW(installPathnoexe.c_str());
- }
- return isExist;
- }
- bool FileCore::SourceFileMoveToDestionPath(wstring sourceFile, wstring destPath)
- {
- wstring dest = destPath + L"\\" + Product::smName_InstallPackage;
- bool issuccess = MoveFileExW(sourceFile.c_str(), dest.c_str(), MOVEFILE_REPLACE_EXISTING);
- return issuccess;
- }
- #pragma endregion
- #pragma region 文件夹
- wstring FolderCore::GetNewSaveFolder(wstring saveFilePath, wstring oldchar, wstring newchar)
- {
- while (true)
- {
- size_t pos = saveFilePath.find(oldchar);
- if (pos != wstring::npos)
- {
- WCHAR pBuf[1] = { L'\0' };
- saveFilePath.replace(pos, oldchar.length(), pBuf, 0);
- saveFilePath.insert(pos, newchar);
- }
- else
- {
- break;
- }
- }
- return saveFilePath;
- }
- wstring FolderCore::GetOrCreateFolderPath(wstring saveFilePath)
- {
- wstring newSaveFolder = FolderCore::GetNewSaveFolder(saveFilePath, L"\\", L"/");
- BOOL isCreate = FALSE;
- if (!PathIsDirectoryW(newSaveFolder.c_str()))
- isCreate = CreateDirectory((newSaveFolder.c_str()), NULL);
- return newSaveFolder;
- }
- bool FolderCore::IsExistTheFolderW(wstring folderPath)
- {
- BOOL isExist = PathFileExistsW(folderPath.c_str());
- return isExist;
- }
- bool FolderCore::IsRootDirectoryW(wstring folderPath)
- {
- int first2 = folderPath.find(L"\\");
- if (first2 + 1 == folderPath.length())
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- wstring FolderCore::AddSubFolderFromRootDirW(wstring folderPath, wstring newSubFolderName)
- {
- if (IsRootDirectoryW(folderPath))
- {
- int first = folderPath.find(L"\\");
- std::wstring newStr = folderPath.substr(0, first + 1);
- folderPath = newStr + newSubFolderName;
- }
- return folderPath;
- }
- wstring FolderCore::FolderBrowser(HWND m_hWnd)
- {
- BROWSEINFO bi;
- bi.hwndOwner = m_hWnd;
- bi.pidlRoot = CSIDL_DESKTOP;//文件夹的根目录,此处为桌面
- bi.pszDisplayName = NULL;
- bi.lpszTitle = NULL;//显示位于对话框左上部的提示信息
- bi.ulFlags = BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;//有新建文件夹按钮
- bi.lpfn = NULL;
- bi.iImage = 0;
- LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
- if (pidl == NULL)
- {
- return L"";
- }
- TCHAR strFolder[MAX_PATH];
- SHGetPathFromIDList(pidl, strFolder);
- std::wstring sFolder(strFolder);
- return sFolder;
- }
- wstring FolderCore::SetSHGetFolderPath(_In_ int csidl)
- {
- TCHAR szPath[MAX_PATH];
- if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, SHGFP_TYPE_CURRENT, szPath)))
- {
- wstring temp(szPath);
- return temp;
- }
- return L"";
- }
- void FolderCore::InitAppTempPath()
- {
- //缓存路劲
- wchar_t strTmpDir[MAX_PATH] = { 0 };
- GetTempPathW(MAX_PATH, strTmpDir);
- wstring temp = strTmpDir;
- if (temp.empty() == false && temp != L"")
- {
- temp = temp + TempFolderName;//Temp缓存文件
- }
- else
- {
- temp = SetSHGetFolderPath(CSIDL_PERSONAL) + L"\\" + TempFolderName;//文档
- }
- BOOL isCreate = True;
- if (!PathIsDirectoryW(temp.c_str()))
- isCreate = CreateDirectory((temp.c_str()), NULL);
- if (isCreate == FALSE)
- temp = L"";
- /*temp = temp+L"\\";*/
- // PathCore::smPath_Temp = AppCore::ReplaceSubStr(temp, L"\\", L"/");
- PathCore::smPath_Temp = temp;
- isCreate = True;
- //安装路径
- if (!PathIsDirectoryW(PathCore::smPath_Install.c_str()))
- isCreate = CreateDirectory((PathCore::smPath_Install.c_str()), NULL);
- if (isCreate)
- {
- PathCore::smPath_Install = PathCore::smPath_Install + L"\\" + Product::smName_Product;
- if (!PathIsDirectoryW(PathCore::smPath_Install.c_str()))
- isCreate = CreateDirectory((PathCore::smPath_Install.c_str()), NULL);
- PathCore::smPath_DefaultInstall = PathCore::smPath_Install;
- }
- }
- wstring FolderCore::GetAppTempPath()
- {
- if (PathCore::smPath_Temp == L"")
- {
- PathCore::smPath_Temp = PathCore::smPath_Install;
- }
- return PathCore::smPath_Temp;
- }
- #include <io.h>
- void FolderCore::ClearAllTempFolder()
- {
- RemoveFolder(PathCore::smPath_Temp.c_str());
- wstring installPathFile = PathCore::smPath_Install + L"\\" + Product::smName_InstallPackage;
- DeleteFile(installPathFile.c_str());
- }
- void FolderCore::RemoveFolder(wstring path)
- {
- WIN32_FIND_DATA FindFileData;
- wstring s = path + L"\\*.*";
- HANDLE hFind = FindFirstFile(s.c_str(), &FindFileData);
- if (INVALID_HANDLE_VALUE == hFind)
- return;
- do
- {
- if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
- {
- //Todo:暂时不遍历子目录,以下if语句是错的
- /*if (FindFileData.cFileName != _T(".") && FindFileData.cFileName != _T("."))
- {
- wstring subFolder = path + L"\\" + FindFileData.cFileName;
- RemoveFolder(subFolder);
- }*/
- }
- else
- {
- wstring file = path + L"\\" + FindFileData.cFileName;
- DeleteFile(file.c_str());
- }
- } while (FindNextFile(hFind, &FindFileData));
- //删除空文件夹:只对空文件夹有作用
- RemoveDirectory(path.c_str());
- FindClose(hFind);
- }
- #pragma endregion
- #pragma region 磁盘
- bool DiskCore::IsEnoughDisk(wstring smPath)
- {
- auto cdDisk = smPath.substr(0, 1);
- std::wstring str_disk_name = cdDisk + L":\\";
- DWORD64 qwFreeBytesToCaller = 0;
- DWORD64 qwTotalBytes = 0;
- DWORD64 qwFreeBytes = 0;
- //获取磁盘信息
- BOOL bResult = GetDiskFreeSpaceExW(str_disk_name.c_str(),
- (PULARGE_INTEGER)&qwFreeBytesToCaller,//空闲空间(字节)
- (PULARGE_INTEGER)&qwTotalBytes,//磁盘总容量(字节)
- (PULARGE_INTEGER)&qwFreeBytes);//可获得的空闲空间(字节)
- if (bResult)
- {
- //可用空间是否足够1G时
- qwFreeBytesToCaller = qwFreeBytesToCaller / (1024 * 1024);
- if (Product::unFreeDiskMinSize > qwFreeBytesToCaller)
- return false;
- }
- return true;
- }
- wstring DiskCore::GetSystemDriveLetter()
- {
- wchar_t str[MAX_PATH] = { 0 };
- GetSystemDirectoryW(str, MAX_PATH);
- wstring diskTag = str;
- wstring disk;
- //避免获取不到系统盘符的可能,那就默认为C盘
- if (diskTag == L"")
- {
- disk = L"C";
- }
- else
- {
- disk = diskTag.substr(0, 1);
- }
-
- return disk;
- }
- //isDowndPackgeBefore:安装前。
- bool DiskCore::IsMeetInstallPathMaxLength(bool isDowndPackgeBefore)
- {
- if (isDowndPackgeBefore)
- {
- wstring installPathFolder = PathCore::smPath_Install + L"\\";
- if (installPathFolder.length() > Product::InstallPathMaxLength)
- {
- return false;
- }
- }
- else
- {
- wstring installPath = PathCore::smPath_Install + L"\\" + Product::smName_Application;
- if (FileCore::IsExistTheFileW(installPath) == false && installPath.length() > Product::InstallPathMaxLength)
- {
- return false;
- }
- }
- return true;
- }
- #pragma endregion
|