如何将7z改成rar

500 - 内部服务器错误。
500 - 内部服务器错误。
您查找的资源存在问题,因而无法显示。3745人阅读
我以前写一个程序要用到压缩,我选择了7z。
原因很简单,他的压缩率高。
7z提供的文档上的方法只能是单文件的。
对于压缩好的文件夹或要压缩文件夹没提供函数直接调用。
我现提供一种方法,就是将7z编译为静态库。
要修改的有:
原MainAr.cpp第改为:extern int Main2(& #ifndef _WIN32& int numArguments, const char *arguments[]& #endif);
static const char *kExceptionErrorMessage = "/n/nError:/n";static const char *kUserBreak& = "/nBreak signaled/n";
static const char *kMemoryExceptionMessage = "/n/nERROR: Can't allocate required memory!/n";static const char *kUnknownExceptionMessage = "/n/nUnknown Error/n";static const char *kInternalExceptionMessage = "/n/nInternal Error #";
int MY_CDECL main(#ifndef _WIN32int numArguments, const char *arguments[]#endif){& g_StdStream = &g_StdO& #ifdef _WIN32改为:extern int Main2(& UStringVector commandStrings& #ifndef _WIN32& int numArguments, const char *arguments[]& #endif);
static const char *kExceptionErrorMessage = "/n/nError:/n";static const char *kUserBreak& = "/nBreak signaled/n";
static const char *kMemoryExceptionMessage = "/n/nERROR: Can't allocate required memory!/n";static const char *kUnknownExceptionMessage = "/n/nUnknown Error/n";static const char *kInternalExceptionMessage = "/n/nInternal Error #";
int MY_CDECL __main_lib(UStringVector commandStrings#ifndef _WIN32int numArguments, const char *arguments[]#endif){& g_StdStream = &g_StdO
原Main.cpp 第181-247行为:const char *kUnsupportedArcTypeMessage = "Unsupported archive type";
int Main2(& #ifndef _WIN32& int numArguments, const char *arguments[]& #endif){& #ifdef _WIN32& SetFileApisToOEM();& #endif& & UStringVector commandS& #ifdef _WIN32& NCommandLineParser::SplitCommandLine(GetCommandLineW(), commandStrings);& #else& GetArguments(numArguments, arguments, commandStrings);& #endif
& if(commandStrings.Size() == 1)& {&&& ShowCopyrightAndHelp(g_StdOut, true);&&& return 0;& }& commandStrings.Delete(0);
int Main2(& UStringVector commandStrings& #ifndef _WIN32& int numArguments, const char *arguments[]& #endif){& //#ifdef _WIN32& //SetFileApisToOEM();& //#endif& //& //UStringVector commandS& //#ifdef _WIN32& //NCommandLineParser::SplitCommandLine(GetCommandLineW(), commandStrings);& //#else& //GetArguments(numArguments, arguments, commandStrings);& //#endif
& //wchar_t *wcc=new wchar_t[1000],*wcc2=new wchar_t[1000]; & //::GetModuleFileName(NULL,wcc,MAX_PATH);& //wchar_t wslash='//';& //wchar_t * pos=wcsrchr(wcc,(int)wslash);& //wchar_t *pw=wcsncpy(wcc2,wcc,pos-wcc+1);wcc2[pos-wcc+1]=0;& SetCurrentDirectory(commandStrings[0]);//add
& if(commandStrings.Size() == 1)& {&&& ShowCopyrightAndHelp(g_StdOut, true);&&& return 0;& }& commandStrings.Delete(0);
原LoadCodecs.cpp第52-67为:#ifdef _WIN32static LPCTSTR kRegistryPath = TEXT("Software") TEXT(STRING_PATH_SEPARATOR) TEXT("7-zip");static LPCTSTR kProgramPathValue = TEXT("Path");static bool ReadPathFromRegistry(HKEY baseKey, CSysString &path){& NRegistry::CK& if(key.Open(baseKey, kRegistryPath, KEY_READ) == ERROR_SUCCESS)&&& if (key.QueryValue(kProgramPathValue, path) == ERROR_SUCCESS)&&& {&&&&& NName::NormalizeDirPathPrefix(path);&&&&&&&& }&}改为:#ifdef _WIN32static LPCTSTR kRegistryPath = TEXT("Software") TEXT(STRING_PATH_SEPARATOR) TEXT("7-zip");static LPCTSTR kProgramPathValue = TEXT("Path");static bool ReadPathFromRegistry(HKEY baseKey, CSysString &path){& //NRegistry::CK& //if(key.Open(baseKey, kRegistryPath, KEY_READ) == ERROR_SUCCESS)& //& if (key.QueryValue(kProgramPathValue, path) == ERROR_SUCCESS)& //& {& //&&& NName::NormalizeDirPathPrefix(path);& //&&&& //& }&}
#endif#endif
完了之后编译为lib
以后就可以类似这样在程序内部调用7z了:
&&&&__run_7z_cmd cmd2;&&&&cmd2.Add("a");&&&&cmd2.Add(vpass);&&&&&&&&cmd2.Add("-y");&&&&cmd2.Add("-mx9");&&&&cmd2.Add(wxT(".//a.7z"));&&&&cmd2.Exec();
__run_7z_cmd是我写的一个类。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:14170次
排名:千里之外用 7-ZIP 制作软件***包详细教程_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
用 7-ZIP 制作软件***包详细教程
上传于||文档简介
&&利​用z​i​p​个​性​制​作​一​些​小​程​序
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩9页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

参考资料

 

随机推荐