mfc 解压7z文件 解压完成后删除
时间: 2023-07-19 10:11:16 浏览: 201
你可以使用7-Zip SDK来解压7z文件,以下是基本的解压代码示例:
```c++
#include <7z.h>
#include <7zCrc.h>
int ExtractArchive(const char* archivePath, const char* outputPath)
{
int res = 0;
HANDLE archiveHandle = NULL;
SevenZipLibrary lib;
if (lib.Load() && lib.CreateObject(CLSID_CFormat7z, &IID_IInArchive, (void**)&archiveHandle) == S_OK)
{
if (lib.QueryInterface(archiveHandle, IID_IInArchive, (void**)&archiveHandle) == S_OK)
{
if (archiveHandle->OpenFile(archivePath) == S_OK)
{
UInt32 numItems = 0;
archiveHandle->GetNumberOfItems(&numItems);
for (UInt32 i = 0; i < numItems; i++)
{
NCOM::CPropVariant prop;
archiveHandle->GetProperty(i, kpidPath, &prop);
UString filePath = prop.bstrVal;
UInt32 size = 0;
archiveHandle->GetProperty(i, kpidSize, &size);
prop.Clear();
archiveHandle->GetProperty(i, kpidIsFolder, &prop);
bool isFolder = prop.boolVal;
if (!isFolder)
{
CMyComPtr<ISequentialOutStream> fileStream;
UString outputFilePath = outputPath;
outputFilePath += filePath;
if (CreateComplexDirectory(outputFilePath) && CreateOutFile(outputFilePath, &fileStream))
{
res = archiveHandle->Extract(&i, 1, false, fileStream);
fileStream.Release();
}
}
}
archiveHandle->Close();
}
archiveHandle->Release();
}
lib.Free();
}
return res;
}
```
这个函数将会解压指定的7z文件到指定的目录,并返回一个值表示操作是否成功。
在解压完成后,你可以使用以下代码删除解压出来的文件夹和文件:
```c++
#include <Windows.h>
#include <iostream>
bool DeleteDirectory(const char* path)
{
bool result = true;
WIN32_FIND_DATA findData;
HANDLE hFind;
std::string fullPath = path;
fullPath += "/*";
hFind = FindFirstFile(fullPath.c_str(), &findData);
if (hFind == INVALID_HANDLE_VALUE)
{
return false;
}
do
{
if (findData.cFileName[0] == '.')
{
continue;
}
std::string filePath = path;
filePath += "/";
filePath += findData.cFileName;
if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if (!DeleteDirectory(filePath.c_str()))
{
result = false;
break;
}
}
else
{
if (!DeleteFile(filePath.c_str()))
{
result = false;
break;
}
}
} while (FindNextFile(hFind, &findData));
FindClose(hFind);
if (result)
{
if (!RemoveDirectory(path))
{
result = false;
}
}
return result;
}
```
你可以在解压完成后调用此函数,以删除解压出来的文件夹和文件。
注意:如果你在解压过程中使用了7-Zip SDK的自动删除功能,那么你不需要手动删除解压出来的文件夹和文件。
阅读全文