#ifndef RVC_MOD_UPLOAD_XUNZIP_ZLIB_H_ #define RVC_MOD_UPLOAD_XUNZIP_ZLIB_H_ #include "SpBase.h" #ifdef RVC_OS_WIN #define ZLIB_WINAPI //win32 必须使用的宏 #endif #include "zip.h" #include "unzip.h" #include #include #include #include #include using namespace std; //GBK转UTF码类 class chs_codecvt : public std::codecvt_byname { public: //因不同平台,名称不同,故这里做转换,统一取出不同平台下面的GBK码 #ifdef RVC_OS_WIN chs_codecvt() : codecvt_byname("chs") { }//zh_CN.GBK or .936 #else chs_codecvt() : codecvt_byname("zh_CN.GBK") { }//.936 #endif // RVC_OS_WIN }; //src必须是UTF8否则抛异常 static wstring utf8_to_wstr(const string& src) { wstring_convert> converter; return converter.from_bytes(src); } static string wstr_to_utf8(const wstring& src) { wstring_convert> convert; return convert.to_bytes(src); } static string utf8_to_gbk(const string& str) { wstring wStr = utf8_to_wstr(str);//utf8转wstring wstring_convert converter; return converter.to_bytes(wStr);//wstring转GBK } static string gbk_to_utf8(const string& str) { wstring_convert converter; wstring wStr = converter.from_bytes(str);//GBK转wstring return wstr_to_utf8(wStr);//wstring 转utf8 } int UnZipToDir(string zipFileName, string destDirPath); int unZipCurrentFile(zipFile zf, string destDirPath); bool is_str_utf8(const char* str); int changeUnZipFileAtt(const char* path); bool replacePlace(string& str, string const& replaceThis, string const& withThis); int saveNormalFile(zipFile zf, string savePath); int saveSymlink(zipFile zf, string savePath); int entry_is_symlink(unz_file_info file_info); int zip_attrib_convert(uint8_t src_sys, uint32_t src_attrib, uint8_t target_sys, uint32_t* target_attrib); int zip_attrib_posix_to_win32(uint32_t posix_attrib, uint32_t* win32_attrib); int zip_attrib_win32_to_posix(uint32_t win32_attrib, uint32_t* posix_attrib); int os_make_symlink(const char* srcPath, const char* target_path); #ifdef RVC_OS_WIN #else unsigned char* utf8_string_create(const char* string); #endif // RVC_OS_WIN #endif //RVC_MOD_UPLOAD_XUNZIP_ZLIB_H_