在自己的C++控制台程序里调用外部的7za.exe命令行工具,需要得到7za的返回值,以确定解压缩是否成功。
7-Zip 返回以下退出代码:
代码 含义
0 没有错误
1 警告(非严重错误)。比如一个或多个文件被其他程序锁定,它们将不会被压缩。
2 严重错误。
7 命令行错误。
8 操作所需要的内存不足。
255 用户中止了处理过程。
要执行的命令行例如: D:\7za.exe a D:\nv1.zip D:\test\*.*
测试代码如下:
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
STARTUPINFOA si;
PROCESS_INFORMATION pi;
ZeroMemory(&pi, sizeof(pi));
ZeroMemory(&si, sizeof(si));
si.cb=sizeof(STARTUPINFOA);
TCHAR cmd[256] = _T("D:\\7za.exe a D:\\nv1.zip D:\\test\\*.*");
BOOL working = ::CreateProcess(NULL,cmd,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS ,NULL,NULL,&si,&pi);
if (working == 0)
{
DWORD error = GetLastError();
cout << "CreateProcess Error : " << error << endl;
getchar();
return 0;
}
WaitForSingleObject(pi.hProcess, INFINITE);
unsigned long Result;
GetExitCodeProcess(pi.hProcess, &Result);
cout << "Exit Code : " << Result << endl;
getchar();
return 0;
}
运行结果:
7-Zip (A) 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
Scanning
Updating archive D:\nv1.zip
Compressing abc.txt
Compressing add.jnt
Everything is Ok
Exit Code : 0