From de68cdce2ac8395ac736adb3d9019afdbc809dd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=9F=83=E5=8D=9A=E6=8B=89=E9=85=B1?= Date: Mon, 29 Aug 2022 15:43:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9ELibZip=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- +MATLAB/+internal/private/WindowsCall.mexw64 | Bin 108544 -> 0 bytes "Windows\345\271\263\345\217\260/LipZip.cpp" | 146 ++++++++++++++++++ .../MATLAB\345\274\202\345\270\270.cpp" | 12 ++ .../MATLAB\345\274\202\345\270\270.h" | 36 +++++ "Windows\345\271\263\345\217\260/MexAPI.h" | 25 +++ .../MexFunction.cpp" | 101 +----------- .../SHFileOperation.cpp" | 77 +++++++++ .../Windows\345\271\263\345\217\260.vcxproj" | 19 ++- ...s\345\271\263\345\217\260.vcxproj.filters" | 15 ++ .../packages.config" | 3 +- 10 files changed, 335 insertions(+), 99 deletions(-) delete mode 100644 +MATLAB/+internal/private/WindowsCall.mexw64 create mode 100644 "Windows\345\271\263\345\217\260/LipZip.cpp" create mode 100644 "Windows\345\271\263\345\217\260/MATLAB\345\274\202\345\270\270.cpp" create mode 100644 "Windows\345\271\263\345\217\260/MATLAB\345\274\202\345\270\270.h" create mode 100644 "Windows\345\271\263\345\217\260/MexAPI.h" create mode 100644 "Windows\345\271\263\345\217\260/SHFileOperation.cpp" diff --git a/+MATLAB/+internal/private/WindowsCall.mexw64 b/+MATLAB/+internal/private/WindowsCall.mexw64 deleted file mode 100644 index db5f5165d4bb98714041ba1a9c7460b3b429f7c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108544 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 J>nwQS{{p0DrF#GX diff --git "a/Windows\345\271\263\345\217\260/LipZip.cpp" "b/Windows\345\271\263\345\217\260/LipZip.cpp" new file mode 100644 index 0000000..a678d89 --- /dev/null +++ "b/Windows\345\271\263\345\217\260/LipZip.cpp" @@ -0,0 +1,146 @@ +#include "pch.h" +#include "MexAPI.h" +#include +#include "MATLAB异常.h" +zip_int64_t 取文件数目(zip_t* Zip) +{ + const zip_int64_t 数目 = zip_get_num_entries(Zip, 0); + if (数目 == -1) [[unlikely]] + throw MATLAB异常(Zip档案无效); +} +API声明(ZipOpen) +{ + std::string path = 万能转码(std::move(inputs[1])); + int 错误代码; + if (const zip_t* const Zip = zip_open(path.c_str(), ZIP_RDONLY, &错误代码)) + outputs[1] = 数组工厂.createScalar((uint64_t)Zip); + else[[unlikely]] + throw MATLAB异常(Zip打开失败, LibZip异常, 错误代码); +} +constexpr zip_flags_t 文件名旗帜 = ZIP_FL_NOCASE | ZIP_FL_ENC_UTF_8; +API声明(ZipNameLocate) +{ + zip_t* const Zip = 万能转码(std::move(inputs[1])); + Array&UTF16 = inputs[2]; + const size_t 个数 = UTF16.getNumberOfElements(); + TypedArrayLocate = 数组工厂.createArray({ 个数 }); + const std::unique_ptrUTF8 = 万能转码>(std::move(UTF16)); + for (size_t a = 0; a < 个数; ++a) + if ((Locate[a] = zip_name_locate(Zip, UTF8[a].c_str(), 文件名旗帜)) == -1) [[unlikely]] + { + const int 错误代码 = zip_get_error(Zip)->zip_err; + if (错误代码 != ZIP_ER_NOENT) [[unlikely]] + throw MATLAB异常(Zip文件名搜索失败, LibZip异常, 错误代码, a); + } + outputs[1] = std::move(Locate); +} +API声明(ZipFopen) +{ + zip_t* const Zip = 万能转码(std::move(inputs[1])); + switch(inputs.size()) + { + case 2: + { + const zip_int64_t 文件数目 = 取文件数目(Zip); + TypedArray返回列表 = 数组工厂.createArray({ (size_t)文件数目 }); + for (zip_int64_t a = 0; a < 文件数目; ++a) + if (!(返回列表[a] = (uint64_t)zip_fopen_index(Zip, a, 0))) [[unlikely]] + throw MATLAB异常(Zip文件打开失败, LibZip异常, zip_get_error(Zip)->zip_err, a); + outputs[1] = std::move(返回列表); + } + break; + case 3: + { + Array& 文件参数 = inputs[2]; + const size_t 文件数目 = 文件参数.getNumberOfElements(); + TypedArray返回列表 = 数组工厂.createArray({ 文件数目 }); + switch (文件参数.getType()) + { + case ArrayType::CELL: + case ArrayType::CHAR: + case ArrayType::MATLAB_STRING: + { + std::unique_ptr文件名 = 万能转码>(std::move(文件参数)); + for (size_t a = 0; a < 文件数目; ++a) + if (!(返回列表[a] = (uint64_t)zip_fopen(Zip, 文件名[a].c_str(), 文件名旗帜))) [[unlikely]] + throw MATLAB异常(Zip文件打开失败, LibZip异常, zip_get_error(Zip)->zip_err, a); + } + break; + case ArrayType::UINT64: + { + TypedArray文件索引(std::move(文件参数)); + for (size_t a = 0; a < 文件数目; ++a) + if (!(返回列表[a] = (uint64_t)zip_fopen_index(Zip, 文件索引[a], 0))) [[unlikely]] + throw MATLAB异常(Zip文件打开失败, LibZip异常, zip_get_error(Zip)->zip_err, a); + } + break; + [[unlikely]] default: + throw MATLAB异常(输入参数类型错误, 2); + } + outputs[1] = std::move(返回列表); + } + break; + [[unlikely]] default: + throw MATLAB异常(输入参数数目错误); + } +} +API声明(ZipFread) +{ + TypedArray文件列表(std::move(inputs[1])); + const zip_uint64_t nbytes = 万能转码(std::move(inputs[2])); + const size_t 文件数目 = 文件列表.getNumberOfElements(); + buffer_ptr_t读入字节 = 数组工厂.createBuffer(文件数目 * nbytes); + TypedArray实际读数 = 数组工厂.createArray({ 文件数目 }); + uint8_t* 写出头 = 读入字节.get(); + for (size_t a = 0; a < 文件数目; ++a) + { + zip_file_t* const 文件 = (zip_file_t*)(uint64_t)文件列表[a]; + if ((实际读数[a] = zip_fread(文件, 写出头, nbytes)) == -1) [[unlikely]] + throw MATLAB异常(Zip文件读入失败, LibZip异常, zip_file_get_error(文件)->zip_err, a); + 写出头 += nbytes; + } + outputs[1] = 数组工厂.createArrayFromBuffer({ nbytes,文件数目 }, std::move(读入字节)); + outputs[2] = std::move(实际读数); +} +API声明(ZipFclose) +{ + for (uint64_t 文件 : TypedArray(std::move(inputs[1]))) + zip_fclose((zip_file_t*)文件); +} +API声明(ZipDiscard) +{ + zip_discard(万能转码(std::move(inputs[1]))); +} +API声明(ZipGetName) +{ + zip_t* const Zip = 万能转码(std::move(inputs[1])); + switch (inputs.size()) + { + case 2: + { + const zip_int64_t 文件数目 = 取文件数目(Zip); + std::unique_ptr文件名列表 = std::make_unique_for_overwrite(文件数目); + for (zip_int64_t a = 0; a < 文件数目; ++a) + if (!(文件名列表[a] = zip_get_name(Zip, a, 0))) [[unlikely]] + throw MATLAB异常(Zip文件名获取失败, LibZip异常, zip_get_error(Zip)->zip_err, a); + outputs[1] = 万能转码(文件名列表.get(), 文件数目); + } + case 3: + { + TypedArray 文件索引(std::move(inputs[2])); + const size_t 文件数目 = 文件索引.getNumberOfElements(); + std::unique_ptr文件名列表 = std::make_unique_for_overwrite(文件数目); + for (size_t a = 0; a < 文件数目; ++a) + if (!(文件名列表[a] = zip_get_name(Zip, 文件索引[a], 0))) [[unlikely]] + throw MATLAB异常(Zip文件名获取失败, LibZip异常, zip_get_error(Zip)->zip_err, a); + outputs[1] = 万能转码(文件名列表.get(), 文件数目); + } + break; + [[unlikely]] default: + throw MATLAB异常(输入参数数目错误); + } +} +API声明(ZipGetNumEntries) +{ + outputs[1] = 数组工厂.createScalar(取文件数目(万能转码(std::move(inputs[1])))); +} \ No newline at end of file diff --git "a/Windows\345\271\263\345\217\260/MATLAB\345\274\202\345\270\270.cpp" "b/Windows\345\271\263\345\217\260/MATLAB\345\274\202\345\270\270.cpp" new file mode 100644 index 0000000..a4c9b23 --- /dev/null +++ "b/Windows\345\271\263\345\217\260/MATLAB\345\274\202\345\270\270.cpp" @@ -0,0 +1,12 @@ +#include "pch.h" +#include "MATLAB异常.h" +#include +MATLAB异常::operator StructArray()const noexcept +{ + StructArray 返回 = 数组工厂.createStructArray({ 1 }, { "ExceptionType","InnerException","ErrorCode","Index"}); + 返回[0]["ExceptionType"] = 数组工厂.createScalar(异常类型); + 返回[0]["InnerException"] = 数组工厂.createScalar(内部异常); + 返回[0]["ErrorCode"] = 数组工厂.createScalar(错误代码); + 返回[0]["Index"] = 数组工厂.createScalar(第几个); + return 返回; +} \ No newline at end of file diff --git "a/Windows\345\271\263\345\217\260/MATLAB\345\274\202\345\270\270.h" "b/Windows\345\271\263\345\217\260/MATLAB\345\274\202\345\270\270.h" new file mode 100644 index 0000000..11a4786 --- /dev/null +++ "b/Windows\345\271\263\345\217\260/MATLAB\345\274\202\345\270\270.h" @@ -0,0 +1,36 @@ +#pragma once +#include +using namespace matlab::data; +enum MATLAB异常类型 :uint8_t +{ + 成功, + 输入不是字符串, + 文件操作失败, + Zip打开失败, + Zip文件名搜索失败, + Zip文件打开失败, + 输入参数类型错误, + Zip文件读入失败, + 输入参数数目错误, + Zip档案无效, + Zip文件名获取失败, +}; +enum 内部异常类型 :uint8_t +{ + 无, + Win32异常, + LibZip异常, +}; +struct MATLAB异常 +{ + MATLAB异常类型 异常类型 = 成功; + 内部异常类型 内部异常 = 无; + int 错误代码 = 0; + size_t 第几个 = 0; + constexpr MATLAB异常() {} + constexpr MATLAB异常(MATLAB异常类型 异常类型) :异常类型(异常类型) {} + constexpr MATLAB异常(MATLAB异常类型 异常类型, size_t 第几个) : 异常类型(异常类型), 第几个(第几个) {} + constexpr MATLAB异常(MATLAB异常类型 异常类型, 内部异常类型 内部异常, int 错误代码) : 异常类型(异常类型), 内部异常(内部异常), 错误代码(错误代码) {} + constexpr MATLAB异常(MATLAB异常类型 异常类型, 内部异常类型 内部异常, int 错误代码, size_t 第几个) : 异常类型(异常类型), 内部异常(内部异常), 错误代码(错误代码), 第几个(第几个) {} + operator StructArray()const noexcept; +}; \ No newline at end of file diff --git "a/Windows\345\271\263\345\217\260/MexAPI.h" "b/Windows\345\271\263\345\217\260/MexAPI.h" new file mode 100644 index 0000000..4a0131c --- /dev/null +++ "b/Windows\345\271\263\345\217\260/MexAPI.h" @@ -0,0 +1,25 @@ +#pragma once +#include + +//SHFileOperation + +#ifdef CopyFile +#undef CopyFile +#endif +API声明(CopyFile); +API声明(Delete); +#ifdef MoveFile +#undef MoveFile +#endif +API声明(MoveFile); + +//LibZip + +API声明(ZipOpen); +API声明(ZipNameLocate); +API声明(ZipFopen); +API声明(ZipFread); +API声明(ZipFclose); +API声明(ZipDiscard); +API声明(ZipGetName); +API声明(ZipGetNumEntries); \ No newline at end of file diff --git "a/Windows\345\271\263\345\217\260/MexFunction.cpp" "b/Windows\345\271\263\345\217\260/MexFunction.cpp" index 95b5ef1..d9a092d 100644 --- "a/Windows\345\271\263\345\217\260/MexFunction.cpp" +++ "b/Windows\345\271\263\345\217\260/MexFunction.cpp" @@ -1,90 +1,7 @@ #include "pch.h" -#include -#include -enum MATLAB异常类型:uint8_t -{ - 成功, - 输入不是字符串, - 文件操作失败 -}; -struct MATLAB异常 -{ - MATLAB异常类型 异常类型; - int Windows错误代码 = 0; -}; -String 字符串转换(Array& 输入) -{ - switch (输入.getType()) - { - case ArrayType::CHAR: - { - String 返回 = CharArray(std::move(输入)).toUTF16(); - 返回.push_back(0); - return std::move(返回); - } - case ArrayType::MATLAB_STRING: - { - StringArray 数组(std::move(输入)); - String 返回 = std::move(数组[0]); - 返回.push_back(0); - const size_t 数组长度 = 数组.getNumberOfElements(); - for (uint8_t a = 1; a < 数组长度; ++a) - 返回.append(数组[a]).push_back(0); - return std::move(返回); - } - case ArrayType::CELL: - { - CellArray 数组(std::move(输入)); - String 返回 = CharArrayRef(数组[0]).toUTF16(); - 返回.push_back(0); - const size_t 数组长度 = 数组.getNumberOfElements(); - for (uint8_t a = 1; a < 数组长度; ++a) - 返回.append(CharArrayRef(数组[a]).toUTF16()).push_back(0); - return std::move(返回); - } - default: - throw MATLAB异常{ 输入不是字符串 }; - } -} -TypedArray 执行操作(SHFILEOPSTRUCTW& 操作结构) -{ - const int 异常 = SHFileOperationW(&操作结构); - if (异常&&异常!=ERROR_CANCELLED) - throw MATLAB异常{ 文件操作失败,异常 }; - else - return 数组工厂.createScalar(操作结构.fAnyOperationsAborted); -} -TypedArray CopyMove(ArgumentList& inputs,UINT wFunc) -{ - String From = 字符串转换(inputs[1]); - FILEOP_FLAGS Flags = FOF_ALLOWUNDO; - Array& ArrayTo = inputs[2]; - if (ArrayTo.getNumberOfElements() > 1 && ArrayTo.getType() != ArrayType::CHAR) - Flags |= FOF_MULTIDESTFILES; - String To = 字符串转换(ArrayTo); - SHFILEOPSTRUCTW 操作结构{ .hwnd = nullptr,.wFunc = wFunc,.pFrom = (wchar_t*)From.c_str() ,.pTo = (wchar_t*)To.c_str(),.fFlags = Flags }; - return 执行操作(操作结构); -} -#ifdef CopyFile -#undef CopyFile -#endif -API声明(CopyFile) -{ - outputs[1] = CopyMove(inputs, FO_COPY); -} -API声明(Delete) -{ - const String From = 字符串转换(inputs[1]); - SHFILEOPSTRUCTW 操作结构{ .hwnd = nullptr,.wFunc = FO_DELETE,.pFrom = (wchar_t*)From.c_str(),.fFlags = FOF_ALLOWUNDO }; - outputs[1] = 执行操作(操作结构); -} -#ifdef MoveFile -#undef MoveFile -#endif -API声明(MoveFile) -{ - outputs[1] = CopyMove(inputs, FO_MOVE); -} +#include +#include "MATLAB异常.h" +#include "MexAPI.h" void MexFunction::operator()(ArgumentList& outputs, ArgumentList& inputs) { static const StructArray 异常结构 = 数组工厂.createStructArray({ 1 }, { "ExceptionType","WindowsErrorCode" }); @@ -100,18 +17,10 @@ void MexFunction::operator()(ArgumentList& outputs, ArgumentList& inputs) } catch (MATLAB异常 异常) { - StructArray 返回 = 异常结构; - 返回[0]["ExceptionType"] = 数组工厂.createScalar(异常.异常类型); - 返回[0]["WindowsErrorCode"] = 数组工厂.createScalar(异常.Windows错误代码); - outputs[0] = 返回; + outputs[0] = 异常; 异常输出补全(outputs); return; } - static const StructArray 成功结构 = [](StructArray 异常结构) - { - 异常结构[0]["ExceptionType"] = 数组工厂.createScalar(成功); - return 异常结构; - } - (异常结构); + static const StructArray 成功结构 = MATLAB异常(); outputs[0] = 成功结构; } \ No newline at end of file diff --git "a/Windows\345\271\263\345\217\260/SHFileOperation.cpp" "b/Windows\345\271\263\345\217\260/SHFileOperation.cpp" new file mode 100644 index 0000000..54242ac --- /dev/null +++ "b/Windows\345\271\263\345\217\260/SHFileOperation.cpp" @@ -0,0 +1,77 @@ +#include "pch.h" +#include "MexAPI.h" +#include +#include "MATLAB异常.h" +String 字符串转换(Array& 输入) +{ + switch (输入.getType()) + { + case ArrayType::CHAR: + { + String 返回 = CharArray(std::move(输入)).toUTF16(); + 返回.push_back(0); + return std::move(返回); + } + case ArrayType::MATLAB_STRING: + { + StringArray 数组(std::move(输入)); + String 返回 = std::move(数组[0]); + 返回.push_back(0); + const size_t 数组长度 = 数组.getNumberOfElements(); + for (uint8_t a = 1; a < 数组长度; ++a) + 返回.append(数组[a]).push_back(0); + return std::move(返回); + } + case ArrayType::CELL: + { + CellArray 数组(std::move(输入)); + String 返回 = CharArrayRef(数组[0]).toUTF16(); + 返回.push_back(0); + const size_t 数组长度 = 数组.getNumberOfElements(); + for (uint8_t a = 1; a < 数组长度; ++a) + 返回.append(CharArrayRef(数组[a]).toUTF16()).push_back(0); + return std::move(返回); + } + default: + throw MATLAB异常(输入不是字符串); + } +} +TypedArray 执行操作(SHFILEOPSTRUCTW& 操作结构) +{ + const int 异常 = SHFileOperationW(&操作结构); + if (异常 && 异常 != ERROR_CANCELLED) + throw MATLAB异常(文件操作失败, Win32异常, 异常); + else + return 数组工厂.createScalar(操作结构.fAnyOperationsAborted); +} +TypedArray CopyMove(ArgumentList& inputs, UINT wFunc) +{ + String From = 字符串转换(inputs[1]); + FILEOP_FLAGS Flags = FOF_ALLOWUNDO; + Array& ArrayTo = inputs[2]; + if (ArrayTo.getNumberOfElements() > 1 && ArrayTo.getType() != ArrayType::CHAR) + Flags |= FOF_MULTIDESTFILES; + String To = 字符串转换(ArrayTo); + SHFILEOPSTRUCTW 操作结构{ .hwnd = nullptr,.wFunc = wFunc,.pFrom = (wchar_t*)From.c_str() ,.pTo = (wchar_t*)To.c_str(),.fFlags = Flags }; + return 执行操作(操作结构); +} +#ifdef CopyFile +#undef CopyFile +#endif +API声明(CopyFile) +{ + outputs[1] = CopyMove(inputs, FO_COPY); +} +API声明(Delete) +{ + const String From = 字符串转换(inputs[1]); + SHFILEOPSTRUCTW 操作结构{ .hwnd = nullptr,.wFunc = FO_DELETE,.pFrom = (wchar_t*)From.c_str(),.fFlags = FOF_ALLOWUNDO }; + outputs[1] = 执行操作(操作结构); +} +#ifdef MoveFile +#undef MoveFile +#endif +API声明(MoveFile) +{ + outputs[1] = CopyMove(inputs, FO_MOVE); +} \ No newline at end of file diff --git "a/Windows\345\271\263\345\217\260/Windows\345\271\263\345\217\260.vcxproj" "b/Windows\345\271\263\345\217\260/Windows\345\271\263\345\217\260.vcxproj" index cabec2d..9ca6563 100644 --- "a/Windows\345\271\263\345\217\260/Windows\345\271\263\345\217\260.vcxproj" +++ "b/Windows\345\271\263\345\217\260/Windows\345\271\263\345\217\260.vcxproj" @@ -74,11 +74,17 @@ $(SolutionDir)+MATLAB\+internal\private\ .mexw64 WindowsCall + C:\Users\vhtmf\source\repos\Mex工具\nuget\build\native\include;$(VC_IncludePath);$(WindowsSDK_IncludePath); + C:\Users\vhtmf\source\repos\Mex工具\nuget\build\native\lib;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64) + MultiThreadedDebug $(SolutionDir)+MATLAB\+internal\private\ .mexw64 WindowsCall + C:\Users\vhtmf\source\repos\Mex工具\nuget\build\native\include;$(VC_IncludePath);$(WindowsSDK_IncludePath); + C:\Users\vhtmf\source\repos\Mex工具\nuget\build\native\lib;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64) + MultiThreaded @@ -132,6 +138,7 @@ Windows true false + Mex工具.v143.x64.$(Configuration).lib;$(CoreLibraryDependencies);%(AdditionalDependencies) @@ -156,14 +163,19 @@ true true false + Mex工具.v143.x64.$(Configuration).lib;$(CoreLibraryDependencies);%(AdditionalDependencies) + + + + Create @@ -171,18 +183,21 @@ Create Create + - + + 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 - + + \ No newline at end of file diff --git "a/Windows\345\271\263\345\217\260/Windows\345\271\263\345\217\260.vcxproj.filters" "b/Windows\345\271\263\345\217\260/Windows\345\271\263\345\217\260.vcxproj.filters" index 8434002..a8ceb20 100644 --- "a/Windows\345\271\263\345\217\260/Windows\345\271\263\345\217\260.vcxproj.filters" +++ "b/Windows\345\271\263\345\217\260/Windows\345\271\263\345\217\260.vcxproj.filters" @@ -21,6 +21,12 @@ 头文件 + + 头文件 + + + 头文件 + @@ -32,6 +38,15 @@ 源文件 + + 源文件 + + + 源文件 + + + 源文件 + diff --git "a/Windows\345\271\263\345\217\260/packages.config" "b/Windows\345\271\263\345\217\260/packages.config" index 8e32f26..8eb1877 100644 --- "a/Windows\345\271\263\345\217\260/packages.config" +++ "b/Windows\345\271\263\345\217\260/packages.config" @@ -1,4 +1,5 @@  - + + \ No newline at end of file