Files
dl/document/html/dl__tool__archiver_8h_source.html
T
2026-09-16 14:07:40 +08:00

407 lines
77 KiB
HTML
Vendored
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>dl: D:/dl/dl/tool/dl_tool_archiver.h 源文件</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">dl
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',false,false,'search.php','搜索',false);
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
/* @license-end */
</script>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_17297ffb27ce571941f5fb5008f01a1f.html">dl</a></li><li class="navelem"><a class="el" href="dir_ea5c46b6f30c27d24a1f3f3df16375bb.html">tool</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="headertitle"><div class="title">dl_tool_archiver.h</div></div>
</div><!--header-->
<div class="contents">
<a href="dl__tool__archiver_8h.html">浏览该文件的文档.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#pragma once</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#include &lt;<a class="code" href="dl__buffer_8h.html">memory/dl_buffer.h</a>&gt;</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#include &lt;<a class="code" href="dl__stream__output_8h.html">memory/dl_stream_output.h</a>&gt;</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#include &lt;<a class="code" href="dl__stream__input_8h.html">memory/dl_stream_input.h</a>&gt;</span></div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#include &lt;<a class="code" href="dl__file_8h.html">io/dl_file.h</a>&gt;</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#include &lt;<a class="code" href="dl__crypto_8h.html">memory/dl_crypto.h</a>&gt;</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &lt;<a class="code" href="dl__string_8h.html">base/dl_string.h</a>&gt;</span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
<div class="foldopen" id="foldopen00022" data-start="{" data-end="}">
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"><a class="line" href="namespacedl_1_1_tool.html"> 22</a></span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedl_1_1_tool.html">dl::Tool</a></div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span>{</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"><a class="line" href="namespacedl_1_1_tool.html#a0a1f6968b69d34a380fb44163593b798"> 24</a></span> <span class="keyword">constexpr</span> uint16_t <a class="code hl_variable" href="namespacedl_1_1_tool.html#a0a1f6968b69d34a380fb44163593b798">ARCHIVER_TYPE</a> = 0x4002;</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"><a class="line" href="namespacedl_1_1_tool.html#a8dd4a1fe6f469071630e78608ac5757e"> 25</a></span> <span class="keyword">constexpr</span> uint8_t <a class="code hl_variable" href="namespacedl_1_1_tool.html#a8dd4a1fe6f469071630e78608ac5757e">ARCHIVER_VERSION</a> = 1;</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span></div>
<div class="foldopen" id="foldopen00028" data-start="{" data-end="};">
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"><a class="line" href="classdl_1_1_tool_1_1_archiver.html"> 28</a></span><span class="keyword">class </span><a class="code hl_class" href="classdl_1_1_tool_1_1_archiver.html">Archiver</a></div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span>{</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen00031" data-start="{" data-end="};">
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="structdl_1_1_tool_1_1_archiver_1_1_head.html"> 31</a></span> <span class="keyword">struct </span><a class="code hl_struct" href="structdl_1_1_tool_1_1_archiver_1_1_head.html">Head</a></div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> {</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a6cdb8bce66ea0c2a282ea77ab1f59903"> 33</a></span> uint16_t <a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a6cdb8bce66ea0c2a282ea77ab1f59903">_type</a>;</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"><a class="line" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a2388db5ae979d8a669a1df6be0c3bc27"> 34</a></span> uint8_t <a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a2388db5ae979d8a669a1df6be0c3bc27">_version</a>;</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#aa495f63b8ab6408b50dd50ff7ace103d"> 35</a></span> uint8_t <a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#aa495f63b8ab6408b50dd50ff7ace103d">_modeCompress</a>;</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"><a class="line" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#af3c89612ea344455b33c94ab0afcb760"> 36</a></span> uint32_t <a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#af3c89612ea344455b33c94ab0afcb760">_sizeFileList</a>; <span class="comment">// 文件列表(压缩前大小)</span></div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"><a class="line" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a2b5d75430e7bb3f1d8a2d195c8cb21e0"> 37</a></span> uint32_t <a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a2b5d75430e7bb3f1d8a2d195c8cb21e0">_sizeFileListCompress</a>; <span class="comment">// 文件列表(压缩后大小)</span></div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a64857ae9f5a38c6ba82eb20c2cefab7b"> 38</a></span> uint64_t <a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a64857ae9f5a38c6ba82eb20c2cefab7b">_sizeFileBlock</a>; <span class="comment">// 文件块大小(压缩前)</span></div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> };</div>
</div>
<div class="foldopen" id="foldopen00040" data-start="{" data-end="};">
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="structdl_1_1_tool_1_1_archiver_1_1_file_info.html"> 40</a></span> <span class="keyword">struct </span><a class="code hl_struct" href="structdl_1_1_tool_1_1_archiver_1_1_file_info.html">FileInfo</a></div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> {</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="structdl_1_1_tool_1_1_archiver_1_1_file_info.html#a36b8e8ad1a378f44860875c458b3baef"> 42</a></span> uint64_t <a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_file_info.html#a36b8e8ad1a378f44860875c458b3baef">_offset</a>; <span class="comment">// 内存偏移</span></div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="structdl_1_1_tool_1_1_archiver_1_1_file_info.html#a1b320a4b5ca738bd452c73331c658e76"> 43</a></span> uint32_t <a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_file_info.html#a1b320a4b5ca738bd452c73331c658e76">_size</a>; <span class="comment">// 大小</span></div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="structdl_1_1_tool_1_1_archiver_1_1_file_info.html#a796109e19dc769155daf6d7317c10c23"> 44</a></span> uint32_t <a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_file_info.html#a796109e19dc769155daf6d7317c10c23">_crc</a>; <span class="comment">// crc</span></div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> };</div>
</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="classdl_1_1_tool_1_1_archiver.html#a1d74308b662cfa605ec799fcdd3888b2"> 46</a></span> <span class="keyword">using </span><a class="code hl_typedef" href="classdl_1_1_tool_1_1_archiver.html#a1d74308b662cfa605ec799fcdd3888b2">FileList</a> = std::unordered_map&lt;std::string, FileInfo&gt;;</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
<div class="foldopen" id="foldopen00048" data-start="{" data-end="};">
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="structdl_1_1_tool_1_1_archiver_1_1_param.html"> 48</a></span> <span class="keyword">struct </span><a class="code hl_struct" href="structdl_1_1_tool_1_1_archiver_1_1_param.html">Param</a></div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> {</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="structdl_1_1_tool_1_1_archiver_1_1_param.html#aee712f5ffe0d43d482ec1999e8a64f6c"> 50</a></span> std::string <a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_param.html#aee712f5ffe0d43d482ec1999e8a64f6c">_src</a>;</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="structdl_1_1_tool_1_1_archiver_1_1_param.html#aa2efdcda624543ae2b42198a27b78fed"> 51</a></span> std::string <a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_param.html#aa2efdcda624543ae2b42198a27b78fed">_out</a>;</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"><a class="line" href="structdl_1_1_tool_1_1_archiver_1_1_param.html#a25796a4e4ac2c5622e83e45255b789b8"> 52</a></span> <a class="code hl_enumeration" href="namespacedl_1_1_memory.html#aa643ad8b151b6299043afaed769ce838">Memory::CompressMode</a> <a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_param.html#a25796a4e4ac2c5622e83e45255b789b8">_compressMode</a>;</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="structdl_1_1_tool_1_1_archiver_1_1_param.html#a5e413ffcee8c105719434ca1d968af8b"> 53</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_param.html#a5e413ffcee8c105719434ca1d968af8b">_bCrc</a>;</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> };</div>
</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
<div class="foldopen" id="foldopen00056" data-start="{" data-end="}">
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="classdl_1_1_tool_1_1_archiver.html#a22cd7de3d2b44f0a24e19c2d8d6deee5"> 56</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classdl_1_1_tool_1_1_archiver.html#a22cd7de3d2b44f0a24e19c2d8d6deee5">Compress</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structdl_1_1_tool_1_1_archiver_1_1_param.html">Param</a>&amp; p)</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> {</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> std::vector&lt;std::string&gt; vec_file;</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <a class="code hl_function" href="namespacedl_1_1_file.html#a3ee7cd52109759691467c4056ce675f2">File::GetPathFileAll</a>(p.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_param.html#aee712f5ffe0d43d482ec1999e8a64f6c">_src</a>, vec_file);</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">if</span> (vec_file.empty())</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> {</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <a class="code hl_define" href="dl__log_8h.html#a04af09851c431d178f16b24fa1aac1e9">log_warn</a>(<span class="stringliteral">&quot;文件数量为0&quot;</span>);</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> }</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <a class="code hl_typedef" href="classdl_1_1_tool_1_1_archiver.html#a1d74308b662cfa605ec799fcdd3888b2">FileList</a> all_file;</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="comment">// 文件块</span></div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <a class="code hl_class" href="classdl_1_1_stream_output.html">StreamOutput</a> s;</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; iter : vec_file)</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> {</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <a class="code hl_class" href="classdl_1_1_buffer.html">Buffer</a> buf = <a class="code hl_function" href="namespacedl_1_1_file.html#ae7bb62971470fc3c4cdf7bc161a05206">File::GetBuffer</a>(iter);</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> uint32_t crc = 0;</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">if</span> (p.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_param.html#a5e413ffcee8c105719434ca1d968af8b">_bCrc</a>)</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> crc = <a class="code hl_function" href="namespacedl_1_1_crypto.html#a3d6a745c3072b3cd82fffd00bab47f42">Crypto::HashCrc32</a>(buf);</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <a class="code hl_struct" href="structdl_1_1_tool_1_1_archiver_1_1_file_info.html">FileInfo</a>&amp; f = all_file[<a class="code hl_function" href="namespacedl_1_1_file.html#acde2d5b52b91b3d4f6740604f47a4313">File::GetRelative</a>(iter, p.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_param.html#aee712f5ffe0d43d482ec1999e8a64f6c">_src</a>)];</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> f.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_file_info.html#a36b8e8ad1a378f44860875c458b3baef">_offset</a> = s.<a class="code hl_function" href="classdl_1_1_stream_output.html#a6cb8549c3cb6ed4c08bf53bff86b0bc5">GetPos</a>();</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> f.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_file_info.html#a1b320a4b5ca738bd452c73331c658e76">_size</a> = (uint32_t)buf.<a class="code hl_function" href="classdl_1_1_buffer.html#a03d432457c957dc01a3f414be21e0c0e">size</a>();</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> f.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_file_info.html#a796109e19dc769155daf6d7317c10c23">_crc</a> = crc;</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> </div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> uint64_t size_file = (uint64_t)buf.<a class="code hl_function" href="classdl_1_1_buffer.html#a03d432457c957dc01a3f414be21e0c0e">size</a>();</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> s.<a class="code hl_function" href="classdl_1_1_stream_output.html#ad9ad1a7301369bbb69a9682034e84a88">Write</a>(&amp;size_file);</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> s.<a class="code hl_function" href="classdl_1_1_stream_output.html#ad9ad1a7301369bbb69a9682034e84a88">Write</a>(&amp;buf);</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> }</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="comment">// 文件列表</span></div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <a class="code hl_class" href="classdl_1_1_stream_output.html">StreamOutput</a> s1;</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> s1.<a class="code hl_function" href="classdl_1_1_stream_output.html#ad9ad1a7301369bbb69a9682034e84a88">Write</a>(&amp;all_file);</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> </div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="comment">// 头</span></div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <a class="code hl_struct" href="structdl_1_1_tool_1_1_archiver_1_1_head.html">Head</a> head;</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a6cdb8bce66ea0c2a282ea77ab1f59903">_type</a> = <a class="code hl_variable" href="namespacedl_1_1_tool.html#a0a1f6968b69d34a380fb44163593b798">ARCHIVER_TYPE</a>;</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a2388db5ae979d8a669a1df6be0c3bc27">_version</a> = <a class="code hl_variable" href="namespacedl_1_1_tool.html#a8dd4a1fe6f469071630e78608ac5757e">ARCHIVER_VERSION</a>;</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#aa495f63b8ab6408b50dd50ff7ace103d">_modeCompress</a> = p.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_param.html#a25796a4e4ac2c5622e83e45255b789b8">_compressMode</a>;</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#af3c89612ea344455b33c94ab0afcb760">_sizeFileList</a> = (uint32_t)s1.<a class="code hl_function" href="classdl_1_1_stream_output.html#a6cb8549c3cb6ed4c08bf53bff86b0bc5">GetPos</a>();</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> s1.<a class="code hl_function" href="classdl_1_1_stream_output.html#a0afcefdd7a34cb1ecbd5d53e63632c1e">Compress</a>(p.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_param.html#a25796a4e4ac2c5622e83e45255b789b8">_compressMode</a>);</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a2b5d75430e7bb3f1d8a2d195c8cb21e0">_sizeFileListCompress</a> = (uint32_t)s1.<a class="code hl_function" href="classdl_1_1_stream_output.html#a6cb8549c3cb6ed4c08bf53bff86b0bc5">GetPos</a>();</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a64857ae9f5a38c6ba82eb20c2cefab7b">_sizeFileBlock</a> = s.<a class="code hl_function" href="classdl_1_1_stream_output.html#a6cb8549c3cb6ed4c08bf53bff86b0bc5">GetPos</a>();</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> </div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> s.<a class="code hl_function" href="classdl_1_1_stream_output.html#a0afcefdd7a34cb1ecbd5d53e63632c1e">Compress</a>(p.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_param.html#a25796a4e4ac2c5622e83e45255b789b8">_compressMode</a>);</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> </div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <a class="code hl_class" href="classdl_1_1_stream_output.html">StreamOutput</a> s_all;</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> s_all.<a class="code hl_function" href="classdl_1_1_stream_output.html#ad9ad1a7301369bbb69a9682034e84a88">Write</a>(&amp;head);</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> s_all.<a class="code hl_function" href="classdl_1_1_stream_output.html#ad9ad1a7301369bbb69a9682034e84a88">Write</a>(s1.<a class="code hl_function" href="classdl_1_1_stream_output.html#a57c56391960844b7593d2fe6d510dab4">GetData</a>(), s1.<a class="code hl_function" href="classdl_1_1_stream_output.html#a6cb8549c3cb6ed4c08bf53bff86b0bc5">GetPos</a>());</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> s_all.<a class="code hl_function" href="classdl_1_1_stream_output.html#ad9ad1a7301369bbb69a9682034e84a88">Write</a>(s.<a class="code hl_function" href="classdl_1_1_stream_output.html#a57c56391960844b7593d2fe6d510dab4">GetData</a>(), s.<a class="code hl_function" href="classdl_1_1_stream_output.html#a6cb8549c3cb6ed4c08bf53bff86b0bc5">GetPos</a>());</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> </div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> s_all.<a class="code hl_function" href="classdl_1_1_stream_output.html#a3a700ab6fff5f143dbda14ad27d9e7a5">Save</a>(p.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_param.html#aa2efdcda624543ae2b42198a27b78fed">_out</a>);</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> }</div>
</div>
<div class="foldopen" id="foldopen00106" data-start="{" data-end="}">
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"><a class="line" href="classdl_1_1_tool_1_1_archiver.html#aa24ad79b05089a895845014108badb04"> 106</a></span> <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classdl_1_1_tool_1_1_archiver.html#aa24ad79b05089a895845014108badb04">Decompress</a>(<a class="code hl_class" href="classdl_1_1_buffer_view.html">BufferView</a> buf, std::string_view out)</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> {</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <a class="code hl_class" href="classdl_1_1_stream_input.html">StreamInput</a> s_all;</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> s_all.<a class="code hl_function" href="classdl_1_1_stream_input.html#aa8d58645e120c590fe3834c632ada39e">LoadFromMemory</a>(buf);</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> </div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <a class="code hl_struct" href="structdl_1_1_tool_1_1_archiver_1_1_head.html">Head</a> head;</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> s_all.<a class="code hl_function" href="classdl_1_1_stream_input.html#a45078239838139420b8d25dcf412f642">Read</a>(&amp;head);</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> </div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keywordflow">if</span> (head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a6cdb8bce66ea0c2a282ea77ab1f59903">_type</a> != <a class="code hl_variable" href="namespacedl_1_1_tool.html#a0a1f6968b69d34a380fb44163593b798">ARCHIVER_TYPE</a>)</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> {</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <a class="code hl_define" href="dl__log_8h.html#abc86a6b34614cb6484cdf935d9350abd">log_err</a>(<span class="stringliteral">&quot;文件类型错误!&quot;</span>);</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> }</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="keywordflow">if</span> (head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a2388db5ae979d8a669a1df6be0c3bc27">_version</a> != <a class="code hl_variable" href="namespacedl_1_1_tool.html#a8dd4a1fe6f469071630e78608ac5757e">ARCHIVER_VERSION</a>)</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> {</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <a class="code hl_define" href="dl__log_8h.html#abc86a6b34614cb6484cdf935d9350abd">log_err</a>(<span class="stringliteral">&quot;存档版本错误!&quot;</span>);</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> }</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="comment">// 文件列表</span></div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <a class="code hl_typedef" href="classdl_1_1_tool_1_1_archiver.html#a1d74308b662cfa605ec799fcdd3888b2">FileList</a> all_file;</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> {</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <a class="code hl_class" href="classdl_1_1_buffer.html">Buffer</a> buf_temp;</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <a class="code hl_class" href="classdl_1_1_buffer_view.html">BufferView</a> buf;</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">if</span> (head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#aa495f63b8ab6408b50dd50ff7ace103d">_modeCompress</a> == <a class="code hl_enumvalue" href="namespacedl_1_1_memory.html#aa643ad8b151b6299043afaed769ce838a008413b048d5468d610847fa2239d514">Memory::E_LZ4</a>)</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> {</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> buf_temp = <a class="code hl_function" href="namespacedl_1_1_memory.html#a6ea4ada3608b3fe6b6b967c6101e5f4e">Memory::DecompressLz4</a>(</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> { s_all.<a class="code hl_function" href="classdl_1_1_stream_input.html#aaf2a19330fede219ef0e156550146004">GetCurrent</a>(), head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a2b5d75430e7bb3f1d8a2d195c8cb21e0">_sizeFileListCompress</a> }, (size_t)head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#af3c89612ea344455b33c94ab0afcb760">_sizeFileList</a>);</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> buf = buf_temp;</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> }</div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span><span class="preprocessor">#ifndef DL_DISABLE_ZLIB</span></div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#aa495f63b8ab6408b50dd50ff7ace103d">_modeCompress</a> == <a class="code hl_enumvalue" href="namespacedl_1_1_memory.html#aa643ad8b151b6299043afaed769ce838a51e3c1af810abb4a121691d69dfec4e4">Memory::E_ZIP</a>)</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> {</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> buf_temp = <a class="code hl_function" href="namespacedl_1_1_memory.html#ab90b9a8c8acaf9740fd6b0ac82c90cfa">Memory::DecompressZip</a>(</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> { s_all.<a class="code hl_function" href="classdl_1_1_stream_input.html#aaf2a19330fede219ef0e156550146004">GetCurrent</a>(), head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a2b5d75430e7bb3f1d8a2d195c8cb21e0">_sizeFileListCompress</a> }, (size_t)head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#af3c89612ea344455b33c94ab0afcb760">_sizeFileList</a>);</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> buf = buf_temp;</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> }</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> buf = { s_all.<a class="code hl_function" href="classdl_1_1_stream_input.html#aaf2a19330fede219ef0e156550146004">GetCurrent</a>(), head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a2b5d75430e7bb3f1d8a2d195c8cb21e0">_sizeFileListCompress</a> };</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <a class="code hl_class" href="classdl_1_1_stream_input.html">StreamInput</a> s1;</div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> s1.<a class="code hl_function" href="classdl_1_1_stream_input.html#aa8d58645e120c590fe3834c632ada39e">LoadFromMemory</a>(buf);</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> s1.<a class="code hl_function" href="classdl_1_1_stream_input.html#a45078239838139420b8d25dcf412f642">Read</a>(&amp;all_file);</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> </div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="comment">// 偏移</span></div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> s_all.<a class="code hl_function" href="classdl_1_1_stream_input.html#ad552c49251d58a4139f32e2627776439">SetPos</a>(s_all.<a class="code hl_function" href="classdl_1_1_stream_input.html#ac0e9e054178dfb121d3726354a620073">GetPos</a>() + head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a2b5d75430e7bb3f1d8a2d195c8cb21e0">_sizeFileListCompress</a>);</div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> }</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="comment">// 文件块</span></div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> {</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <a class="code hl_class" href="classdl_1_1_buffer.html">Buffer</a> buf_temp;</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <a class="code hl_class" href="classdl_1_1_buffer_view.html">BufferView</a> buf;</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keywordflow">if</span> (head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#aa495f63b8ab6408b50dd50ff7ace103d">_modeCompress</a> == <a class="code hl_enumvalue" href="namespacedl_1_1_memory.html#aa643ad8b151b6299043afaed769ce838a008413b048d5468d610847fa2239d514">Memory::E_LZ4</a>)</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> {</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> buf_temp = <a class="code hl_function" href="namespacedl_1_1_memory.html#a6ea4ada3608b3fe6b6b967c6101e5f4e">Memory::DecompressLz4</a>(</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> { s_all.<a class="code hl_function" href="classdl_1_1_stream_input.html#aaf2a19330fede219ef0e156550146004">GetCurrent</a>(), s_all.<a class="code hl_function" href="classdl_1_1_stream_input.html#a6a259a227d38240ecd16647d8b862a30">GetRemain</a>() }, (size_t)head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a64857ae9f5a38c6ba82eb20c2cefab7b">_sizeFileBlock</a>);</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> buf = buf_temp;</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> }</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span><span class="preprocessor">#ifndef DL_DISABLE_ZLIB</span></div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#aa495f63b8ab6408b50dd50ff7ace103d">_modeCompress</a> == <a class="code hl_enumvalue" href="namespacedl_1_1_memory.html#aa643ad8b151b6299043afaed769ce838a51e3c1af810abb4a121691d69dfec4e4">Memory::E_ZIP</a>)</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> {</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> buf_temp = <a class="code hl_function" href="namespacedl_1_1_memory.html#ab90b9a8c8acaf9740fd6b0ac82c90cfa">Memory::DecompressZip</a>(</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> { s_all.<a class="code hl_function" href="classdl_1_1_stream_input.html#aaf2a19330fede219ef0e156550146004">GetCurrent</a>(), s_all.<a class="code hl_function" href="classdl_1_1_stream_input.html#a6a259a227d38240ecd16647d8b862a30">GetRemain</a>() }, (size_t)head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a64857ae9f5a38c6ba82eb20c2cefab7b">_sizeFileBlock</a>);</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> buf = buf_temp;</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> }</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> buf = { s_all.<a class="code hl_function" href="classdl_1_1_stream_input.html#aaf2a19330fede219ef0e156550146004">GetCurrent</a>(), s_all.<a class="code hl_function" href="classdl_1_1_stream_input.html#a6a259a227d38240ecd16647d8b862a30">GetRemain</a>() };</div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> </div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keywordtype">size_t</span> count = 0;</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; [name, info] : all_file)</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> {</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> std::byte* p = buf.<a class="code hl_function" href="classdl_1_1_buffer_view.html#ad76b68590bcb69bf1d144ee14919f18e">data</a>() + info._offset;</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> std::size_t size_file = (std::size_t)*(uint64_t*)p;</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">if</span> (info._size != size_file)</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> {</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <a class="code hl_define" href="dl__log_8h.html#abc86a6b34614cb6484cdf935d9350abd">log_err</a>(<span class="stringliteral">&quot;文件大小不匹配:{}&quot;</span>, size_file);</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">continue</span>;</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> }</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> p += <span class="keyword">sizeof</span>(uint64_t);</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> </div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> std::string path_name = out + name;</div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespacedl_1_1_file.html#ac0f557be990b6b800795fa76107689ef">File::CreateFolder</a>(<a class="code hl_function" href="namespacedl_1_1_file.html#a944ba155c2c810d67a8ee8ca5efd6a1b">File::GetFilePath</a>(path_name)))</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> {</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> <a class="code hl_define" href="dl__log_8h.html#abc86a6b34614cb6484cdf935d9350abd">log_err</a>(<span class="stringliteral">&quot;路径创建失败:{}&quot;</span>, <a class="code hl_function" href="namespacedl_1_1_file.html#a944ba155c2c810d67a8ee8ca5efd6a1b">File::GetFilePath</a>(path_name));</div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">continue</span>;</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> }</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespacedl_1_1_file.html#a8281f88a2d0a6e3c28610589e3858e84">File::SaveBuffer</a>(</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> { p, size_file }, path_name))</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> {</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <a class="code hl_define" href="dl__log_8h.html#abc86a6b34614cb6484cdf935d9350abd">log_err</a>(<span class="stringliteral">&quot;文件保存失败:{}&quot;</span>, path_name);</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <span class="keywordflow">continue</span>;</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> }</div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> ++count;</div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> }</div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">return</span> count == all_file.<a class="code hl_function" href="classdl_1_1_buffer_view.html#a1713eb619dfa95a8c0a4b6516cc6bde6">size</a>();</div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> }</div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> }</div>
</div>
<div class="foldopen" id="foldopen00202" data-start="{" data-end="}">
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"><a class="line" href="classdl_1_1_tool_1_1_archiver.html#ac794894b44d9657db67e48c1e17bffba"> 202</a></span> <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classdl_1_1_tool_1_1_archiver.html#ac794894b44d9657db67e48c1e17bffba">Decompress</a>(std::string_view src, std::string_view out)</div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> {</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <a class="code hl_class" href="classdl_1_1_buffer.html">Buffer</a> buf = <a class="code hl_function" href="namespacedl_1_1_file.html#ae7bb62971470fc3c4cdf7bc161a05206">File::GetBuffer</a>(src);</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <span class="keywordflow">if</span> (buf.<a class="code hl_function" href="classdl_1_1_buffer.html#a85850fb4909a9d8b5e6ac1373c04b202">empty</a>())</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> {</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <a class="code hl_define" href="dl__log_8h.html#abc86a6b34614cb6484cdf935d9350abd">log_err</a>(<span class="stringliteral">&quot;加载文件失败:{}&quot;</span>, src);</div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> }</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">return</span> <a class="code hl_function" href="classdl_1_1_tool_1_1_archiver.html#aa24ad79b05089a895845014108badb04">Decompress</a>(buf, out);</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> }</div>
</div>
<div class="foldopen" id="foldopen00212" data-start="{" data-end="}">
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"><a class="line" href="classdl_1_1_tool_1_1_archiver.html#a4c618b22d07b0b10192a6a1d112c0dbb"> 212</a></span> <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classdl_1_1_tool_1_1_archiver.html#a4c618b22d07b0b10192a6a1d112c0dbb">GetFileList</a>(<a class="code hl_class" href="classdl_1_1_buffer_view.html">BufferView</a> buf, <a class="code hl_typedef" href="classdl_1_1_tool_1_1_archiver.html#a1d74308b662cfa605ec799fcdd3888b2">FileList</a>&amp; all_file)</div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> {</div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <a class="code hl_class" href="classdl_1_1_stream_input.html">StreamInput</a> s_all;</div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> s_all.<a class="code hl_function" href="classdl_1_1_stream_input.html#aa8d58645e120c590fe3834c632ada39e">LoadFromMemory</a>(buf);</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> </div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <a class="code hl_struct" href="structdl_1_1_tool_1_1_archiver_1_1_head.html">Head</a> head;</div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> s_all.<a class="code hl_function" href="classdl_1_1_stream_input.html#a45078239838139420b8d25dcf412f642">Read</a>(&amp;head);</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> </div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">if</span> (head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a6cdb8bce66ea0c2a282ea77ab1f59903">_type</a> != <a class="code hl_variable" href="namespacedl_1_1_tool.html#a0a1f6968b69d34a380fb44163593b798">ARCHIVER_TYPE</a>)</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> {</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <a class="code hl_define" href="dl__log_8h.html#abc86a6b34614cb6484cdf935d9350abd">log_err</a>(<span class="stringliteral">&quot;文件类型错误!&quot;</span>);</div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> }</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="keywordflow">if</span> (head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a2388db5ae979d8a669a1df6be0c3bc27">_version</a> != <a class="code hl_variable" href="namespacedl_1_1_tool.html#a8dd4a1fe6f469071630e78608ac5757e">ARCHIVER_VERSION</a>)</div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> {</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <a class="code hl_define" href="dl__log_8h.html#abc86a6b34614cb6484cdf935d9350abd">log_err</a>(<span class="stringliteral">&quot;存档版本错误!&quot;</span>);</div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> }</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> {</div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> <a class="code hl_class" href="classdl_1_1_buffer.html">Buffer</a> buf_temp;</div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> <a class="code hl_class" href="classdl_1_1_buffer_view.html">BufferView</a> buf;</div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">if</span> (head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#aa495f63b8ab6408b50dd50ff7ace103d">_modeCompress</a> == <a class="code hl_enumvalue" href="namespacedl_1_1_memory.html#aa643ad8b151b6299043afaed769ce838a008413b048d5468d610847fa2239d514">Memory::E_LZ4</a>)</div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> {</div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> buf_temp = <a class="code hl_function" href="namespacedl_1_1_memory.html#a6ea4ada3608b3fe6b6b967c6101e5f4e">Memory::DecompressLz4</a>(</div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> { s_all.<a class="code hl_function" href="classdl_1_1_stream_input.html#aaf2a19330fede219ef0e156550146004">GetCurrent</a>(), head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a2b5d75430e7bb3f1d8a2d195c8cb21e0">_sizeFileListCompress</a> }, (size_t)head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#af3c89612ea344455b33c94ab0afcb760">_sizeFileList</a>);</div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> buf = buf_temp;</div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> }</div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span><span class="preprocessor">#ifndef DL_DISABLE_ZLIB</span></div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#aa495f63b8ab6408b50dd50ff7ace103d">_modeCompress</a> == <a class="code hl_enumvalue" href="namespacedl_1_1_memory.html#aa643ad8b151b6299043afaed769ce838a51e3c1af810abb4a121691d69dfec4e4">Memory::E_ZIP</a>)</div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> {</div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> buf_temp = <a class="code hl_function" href="namespacedl_1_1_memory.html#ab90b9a8c8acaf9740fd6b0ac82c90cfa">Memory::DecompressZip</a>(</div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> { s_all.<a class="code hl_function" href="classdl_1_1_stream_input.html#aaf2a19330fede219ef0e156550146004">GetCurrent</a>(), head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a2b5d75430e7bb3f1d8a2d195c8cb21e0">_sizeFileListCompress</a> }, (size_t)head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#af3c89612ea344455b33c94ab0afcb760">_sizeFileList</a>);</div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> buf = buf_temp;</div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> }</div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> buf = { s_all.<a class="code hl_function" href="classdl_1_1_stream_input.html#aaf2a19330fede219ef0e156550146004">GetCurrent</a>(), head.<a class="code hl_variable" href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a2b5d75430e7bb3f1d8a2d195c8cb21e0">_sizeFileListCompress</a> };</div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> <a class="code hl_class" href="classdl_1_1_stream_input.html">StreamInput</a> s1;</div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> s1.<a class="code hl_function" href="classdl_1_1_stream_input.html#aa8d58645e120c590fe3834c632ada39e">LoadFromMemory</a>(buf);</div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> s1.<a class="code hl_function" href="classdl_1_1_stream_input.html#a45078239838139420b8d25dcf412f642">Read</a>(&amp;all_file);</div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> }</div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> }</div>
</div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span><span class="keyword">private</span>:</div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> <span class="comment">// 头</span></div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> </div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> <span class="comment">// 文件列表(压缩)</span></div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> <span class="comment">// name、FileInfo</span></div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> </div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> <span class="comment">// 文件数据(压缩)</span></div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> <span class="comment">// buffer</span></div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span>};</div>
</div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> </div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span>}</div>
</div>
<div class="ttc" id="aclassdl_1_1_buffer_html"><div class="ttname"><a href="classdl_1_1_buffer.html">dl::Buffer</a></div><div class="ttdef"><b>定义</b> <a href="dl__buffer_8h_source.html#l00028">dl_buffer.h:29</a></div></div>
<div class="ttc" id="aclassdl_1_1_buffer_html_a03d432457c957dc01a3f414be21e0c0e"><div class="ttname"><a href="classdl_1_1_buffer.html#a03d432457c957dc01a3f414be21e0c0e">dl::Buffer::size</a></div><div class="ttdeci">size_t size() const</div><div class="ttdef"><b>定义</b> <a href="dl__buffer_8h_source.html#l00034">dl_buffer.h:34</a></div></div>
<div class="ttc" id="aclassdl_1_1_buffer_html_a85850fb4909a9d8b5e6ac1373c04b202"><div class="ttname"><a href="classdl_1_1_buffer.html#a85850fb4909a9d8b5e6ac1373c04b202">dl::Buffer::empty</a></div><div class="ttdeci">bool empty()</div><div class="ttdef"><b>定义</b> <a href="dl__buffer_8h_source.html#l00081">dl_buffer.h:81</a></div></div>
<div class="ttc" id="aclassdl_1_1_buffer_view_html"><div class="ttname"><a href="classdl_1_1_buffer_view.html">dl::BufferView</a></div><div class="ttdef"><b>定义</b> <a href="dl__buffer_8h_source.html#l00155">dl_buffer.h:156</a></div></div>
<div class="ttc" id="aclassdl_1_1_buffer_view_html_a1713eb619dfa95a8c0a4b6516cc6bde6"><div class="ttname"><a href="classdl_1_1_buffer_view.html#a1713eb619dfa95a8c0a4b6516cc6bde6">dl::BufferView::size</a></div><div class="ttdeci">size_t size() const</div><div class="ttdef"><b>定义</b> <a href="dl__buffer_8h_source.html#l00161">dl_buffer.h:161</a></div></div>
<div class="ttc" id="aclassdl_1_1_buffer_view_html_ad76b68590bcb69bf1d144ee14919f18e"><div class="ttname"><a href="classdl_1_1_buffer_view.html#ad76b68590bcb69bf1d144ee14919f18e">dl::BufferView::data</a></div><div class="ttdeci">std::byte * data()</div><div class="ttdef"><b>定义</b> <a href="dl__buffer_8h_source.html#l00158">dl_buffer.h:158</a></div></div>
<div class="ttc" id="aclassdl_1_1_stream_input_html"><div class="ttname"><a href="classdl_1_1_stream_input.html">dl::StreamInput</a></div><div class="ttdoc">二进制输入流</div><div class="ttdef"><b>定义</b> <a href="dl__stream__input_8h_source.html#l00031">dl_stream_input.h:32</a></div></div>
<div class="ttc" id="aclassdl_1_1_stream_input_html_a45078239838139420b8d25dcf412f642"><div class="ttname"><a href="classdl_1_1_stream_input.html#a45078239838139420b8d25dcf412f642">dl::StreamInput::Read</a></div><div class="ttdeci">void Read(T *data)</div><div class="ttdef"><b>定义</b> <a href="dl__stream__input_8h_source.html#l00041">dl_stream_input.h:41</a></div></div>
<div class="ttc" id="aclassdl_1_1_stream_input_html_a6a259a227d38240ecd16647d8b862a30"><div class="ttname"><a href="classdl_1_1_stream_input.html#a6a259a227d38240ecd16647d8b862a30">dl::StreamInput::GetRemain</a></div><div class="ttdeci">size_t GetRemain()</div><div class="ttdef"><b>定义</b> <a href="dl__stream__input_8h_source.html#l00194">dl_stream_input.h:194</a></div></div>
<div class="ttc" id="aclassdl_1_1_stream_input_html_aa8d58645e120c590fe3834c632ada39e"><div class="ttname"><a href="classdl_1_1_stream_input.html#aa8d58645e120c590fe3834c632ada39e">dl::StreamInput::LoadFromMemory</a></div><div class="ttdeci">void LoadFromMemory(BufferView buf, bool decompress=false)</div></div>
<div class="ttc" id="aclassdl_1_1_stream_input_html_aaf2a19330fede219ef0e156550146004"><div class="ttname"><a href="classdl_1_1_stream_input.html#aaf2a19330fede219ef0e156550146004">dl::StreamInput::GetCurrent</a></div><div class="ttdeci">std::byte * GetCurrent()</div><div class="ttdef"><b>定义</b> <a href="dl__stream__input_8h_source.html#l00197">dl_stream_input.h:197</a></div></div>
<div class="ttc" id="aclassdl_1_1_stream_input_html_ac0e9e054178dfb121d3726354a620073"><div class="ttname"><a href="classdl_1_1_stream_input.html#ac0e9e054178dfb121d3726354a620073">dl::StreamInput::GetPos</a></div><div class="ttdeci">size_t GetPos()</div><div class="ttdef"><b>定义</b> <a href="dl__stream__input_8h_source.html#l00193">dl_stream_input.h:193</a></div></div>
<div class="ttc" id="aclassdl_1_1_stream_input_html_ad552c49251d58a4139f32e2627776439"><div class="ttname"><a href="classdl_1_1_stream_input.html#ad552c49251d58a4139f32e2627776439">dl::StreamInput::SetPos</a></div><div class="ttdeci">void SetPos(size_t pos)</div></div>
<div class="ttc" id="aclassdl_1_1_stream_output_html"><div class="ttname"><a href="classdl_1_1_stream_output.html">dl::StreamOutput</a></div><div class="ttdoc">二进制输出流</div><div class="ttdef"><b>定义</b> <a href="dl__stream__output_8h_source.html#l00028">dl_stream_output.h:29</a></div></div>
<div class="ttc" id="aclassdl_1_1_stream_output_html_a0afcefdd7a34cb1ecbd5d53e63632c1e"><div class="ttname"><a href="classdl_1_1_stream_output.html#a0afcefdd7a34cb1ecbd5d53e63632c1e">dl::StreamOutput::Compress</a></div><div class="ttdeci">void Compress(Memory::CompressMode mode)</div><div class="ttdoc">压缩当前内存</div></div>
<div class="ttc" id="aclassdl_1_1_stream_output_html_a3a700ab6fff5f143dbda14ad27d9e7a5"><div class="ttname"><a href="classdl_1_1_stream_output.html#a3a700ab6fff5f143dbda14ad27d9e7a5">dl::StreamOutput::Save</a></div><div class="ttdeci">bool Save(std::string_view path_name, bool compress=false)</div><div class="ttdoc">保存到文件</div></div>
<div class="ttc" id="aclassdl_1_1_stream_output_html_a57c56391960844b7593d2fe6d510dab4"><div class="ttname"><a href="classdl_1_1_stream_output.html#a57c56391960844b7593d2fe6d510dab4">dl::StreamOutput::GetData</a></div><div class="ttdeci">const std::byte * GetData()</div><div class="ttdoc">返回指向的内存指针</div></div>
<div class="ttc" id="aclassdl_1_1_stream_output_html_a6cb8549c3cb6ed4c08bf53bff86b0bc5"><div class="ttname"><a href="classdl_1_1_stream_output.html#a6cb8549c3cb6ed4c08bf53bff86b0bc5">dl::StreamOutput::GetPos</a></div><div class="ttdeci">size_t GetPos()</div><div class="ttdoc">返回 流位置</div><div class="ttdef"><b>定义</b> <a href="dl__stream__output_8h_source.html#l00165">dl_stream_output.h:165</a></div></div>
<div class="ttc" id="aclassdl_1_1_stream_output_html_ad9ad1a7301369bbb69a9682034e84a88"><div class="ttname"><a href="classdl_1_1_stream_output.html#ad9ad1a7301369bbb69a9682034e84a88">dl::StreamOutput::Write</a></div><div class="ttdeci">void Write(const T *data)</div><div class="ttdoc">写入一个对象</div><div class="ttdef"><b>定义</b> <a href="dl__stream__output_8h_source.html#l00053">dl_stream_output.h:53</a></div></div>
<div class="ttc" id="aclassdl_1_1_tool_1_1_archiver_html"><div class="ttname"><a href="classdl_1_1_tool_1_1_archiver.html">dl::Tool::Archiver</a></div><div class="ttdoc">文件夹打包解包器</div><div class="ttdef"><b>定义</b> <a href="#l00028">dl_tool_archiver.h:29</a></div></div>
<div class="ttc" id="aclassdl_1_1_tool_1_1_archiver_html_a1d74308b662cfa605ec799fcdd3888b2"><div class="ttname"><a href="classdl_1_1_tool_1_1_archiver.html#a1d74308b662cfa605ec799fcdd3888b2">dl::Tool::Archiver::FileList</a></div><div class="ttdeci">std::unordered_map&lt; std::string, FileInfo &gt; FileList</div><div class="ttdef"><b>定义</b> <a href="#l00046">dl_tool_archiver.h:46</a></div></div>
<div class="ttc" id="aclassdl_1_1_tool_1_1_archiver_html_a22cd7de3d2b44f0a24e19c2d8d6deee5"><div class="ttname"><a href="classdl_1_1_tool_1_1_archiver.html#a22cd7de3d2b44f0a24e19c2d8d6deee5">dl::Tool::Archiver::Compress</a></div><div class="ttdeci">static void Compress(const Param &amp;p)</div><div class="ttdef"><b>定义</b> <a href="#l00056">dl_tool_archiver.h:56</a></div></div>
<div class="ttc" id="aclassdl_1_1_tool_1_1_archiver_html_a4c618b22d07b0b10192a6a1d112c0dbb"><div class="ttname"><a href="classdl_1_1_tool_1_1_archiver.html#a4c618b22d07b0b10192a6a1d112c0dbb">dl::Tool::Archiver::GetFileList</a></div><div class="ttdeci">static bool GetFileList(BufferView buf, FileList &amp;all_file)</div><div class="ttdef"><b>定义</b> <a href="#l00212">dl_tool_archiver.h:212</a></div></div>
<div class="ttc" id="aclassdl_1_1_tool_1_1_archiver_html_aa24ad79b05089a895845014108badb04"><div class="ttname"><a href="classdl_1_1_tool_1_1_archiver.html#aa24ad79b05089a895845014108badb04">dl::Tool::Archiver::Decompress</a></div><div class="ttdeci">static bool Decompress(BufferView buf, std::string_view out)</div><div class="ttdef"><b>定义</b> <a href="#l00106">dl_tool_archiver.h:106</a></div></div>
<div class="ttc" id="aclassdl_1_1_tool_1_1_archiver_html_ac794894b44d9657db67e48c1e17bffba"><div class="ttname"><a href="classdl_1_1_tool_1_1_archiver.html#ac794894b44d9657db67e48c1e17bffba">dl::Tool::Archiver::Decompress</a></div><div class="ttdeci">static bool Decompress(std::string_view src, std::string_view out)</div><div class="ttdef"><b>定义</b> <a href="#l00202">dl_tool_archiver.h:202</a></div></div>
<div class="ttc" id="adl__buffer_8h_html"><div class="ttname"><a href="dl__buffer_8h.html">dl_buffer.h</a></div><div class="ttdoc">表示一段内存</div></div>
<div class="ttc" id="adl__crypto_8h_html"><div class="ttname"><a href="dl__crypto_8h.html">dl_crypto.h</a></div><div class="ttdoc">密码算法</div></div>
<div class="ttc" id="adl__file_8h_html"><div class="ttname"><a href="dl__file_8h.html">dl_file.h</a></div><div class="ttdoc">文件系统</div></div>
<div class="ttc" id="adl__log_8h_html_a04af09851c431d178f16b24fa1aac1e9"><div class="ttname"><a href="dl__log_8h.html#a04af09851c431d178f16b24fa1aac1e9">log_warn</a></div><div class="ttdeci">#define log_warn(...)</div><div class="ttdef"><b>定义</b> <a href="dl__log_8h_source.html#l00283">dl_log.h:283</a></div></div>
<div class="ttc" id="adl__log_8h_html_abc86a6b34614cb6484cdf935d9350abd"><div class="ttname"><a href="dl__log_8h.html#abc86a6b34614cb6484cdf935d9350abd">log_err</a></div><div class="ttdeci">#define log_err(...)</div><div class="ttdef"><b>定义</b> <a href="dl__log_8h_source.html#l00284">dl_log.h:284</a></div></div>
<div class="ttc" id="adl__stream__input_8h_html"><div class="ttname"><a href="dl__stream__input_8h.html">dl_stream_input.h</a></div><div class="ttdoc">输入流</div></div>
<div class="ttc" id="adl__stream__output_8h_html"><div class="ttname"><a href="dl__stream__output_8h.html">dl_stream_output.h</a></div><div class="ttdoc">输出流</div></div>
<div class="ttc" id="adl__string_8h_html"><div class="ttname"><a href="dl__string_8h.html">dl_string.h</a></div><div class="ttdoc">字符串相关</div></div>
<div class="ttc" id="anamespacedl_1_1_crypto_html_a3d6a745c3072b3cd82fffd00bab47f42"><div class="ttname"><a href="namespacedl_1_1_crypto.html#a3d6a745c3072b3cd82fffd00bab47f42">dl::Crypto::HashCrc32</a></div><div class="ttdeci">uint32_t HashCrc32(BufferView buf, uint32_t crc=0)</div><div class="ttdoc">crc32哈希</div></div>
<div class="ttc" id="anamespacedl_1_1_file_html_a3ee7cd52109759691467c4056ce675f2"><div class="ttname"><a href="namespacedl_1_1_file.html#a3ee7cd52109759691467c4056ce675f2">dl::File::GetPathFileAll</a></div><div class="ttdeci">void GetPathFileAll(std::string_view path, std::vector&lt; std::string &gt; &amp;ret, std::string_view regex=&quot;&quot;, bool recursion=true)</div><div class="ttdoc">获取文件夹所有文件</div></div>
<div class="ttc" id="anamespacedl_1_1_file_html_a8281f88a2d0a6e3c28610589e3858e84"><div class="ttname"><a href="namespacedl_1_1_file.html#a8281f88a2d0a6e3c28610589e3858e84">dl::File::SaveBuffer</a></div><div class="ttdeci">bool SaveBuffer(BufferView buf, std::string_view path_name)</div><div class="ttdoc">将内存保存为文件</div></div>
<div class="ttc" id="anamespacedl_1_1_file_html_a944ba155c2c810d67a8ee8ca5efd6a1b"><div class="ttname"><a href="namespacedl_1_1_file.html#a944ba155c2c810d67a8ee8ca5efd6a1b">dl::File::GetFilePath</a></div><div class="ttdeci">std::string GetFilePath(std::string_view path_name)</div><div class="ttdoc">返回文件所在路径</div></div>
<div class="ttc" id="anamespacedl_1_1_file_html_ac0f557be990b6b800795fa76107689ef"><div class="ttname"><a href="namespacedl_1_1_file.html#ac0f557be990b6b800795fa76107689ef">dl::File::CreateFolder</a></div><div class="ttdeci">bool CreateFolder(std::string_view path)</div><div class="ttdoc">创建目录</div></div>
<div class="ttc" id="anamespacedl_1_1_file_html_acde2d5b52b91b3d4f6740604f47a4313"><div class="ttname"><a href="namespacedl_1_1_file.html#acde2d5b52b91b3d4f6740604f47a4313">dl::File::GetRelative</a></div><div class="ttdeci">std::string GetRelative(std::string_view path_name, std::string_view path_base)</div><div class="ttdoc">返回相对路径</div></div>
<div class="ttc" id="anamespacedl_1_1_file_html_ae7bb62971470fc3c4cdf7bc161a05206"><div class="ttname"><a href="namespacedl_1_1_file.html#ae7bb62971470fc3c4cdf7bc161a05206">dl::File::GetBuffer</a></div><div class="ttdeci">Buffer GetBuffer(std::string_view path_name)</div><div class="ttdoc">返回文件内存</div></div>
<div class="ttc" id="anamespacedl_1_1_memory_html_a6ea4ada3608b3fe6b6b967c6101e5f4e"><div class="ttname"><a href="namespacedl_1_1_memory.html#a6ea4ada3608b3fe6b6b967c6101e5f4e">dl::Memory::DecompressLz4</a></div><div class="ttdeci">Buffer DecompressLz4(BufferView src, size_t size_origin=0)</div><div class="ttdoc">解压缩数据,使用lz4算法</div></div>
<div class="ttc" id="anamespacedl_1_1_memory_html_aa643ad8b151b6299043afaed769ce838"><div class="ttname"><a href="namespacedl_1_1_memory.html#aa643ad8b151b6299043afaed769ce838">dl::Memory::CompressMode</a></div><div class="ttdeci">CompressMode</div><div class="ttdef"><b>定义</b> <a href="dl__memory_8h_source.html#l00022">dl_memory.h:23</a></div></div>
<div class="ttc" id="anamespacedl_1_1_memory_html_aa643ad8b151b6299043afaed769ce838a008413b048d5468d610847fa2239d514"><div class="ttname"><a href="namespacedl_1_1_memory.html#aa643ad8b151b6299043afaed769ce838a008413b048d5468d610847fa2239d514">dl::Memory::E_LZ4</a></div><div class="ttdeci">@ E_LZ4</div><div class="ttdef"><b>定义</b> <a href="dl__memory_8h_source.html#l00026">dl_memory.h:26</a></div></div>
<div class="ttc" id="anamespacedl_1_1_memory_html_aa643ad8b151b6299043afaed769ce838a51e3c1af810abb4a121691d69dfec4e4"><div class="ttname"><a href="namespacedl_1_1_memory.html#aa643ad8b151b6299043afaed769ce838a51e3c1af810abb4a121691d69dfec4e4">dl::Memory::E_ZIP</a></div><div class="ttdeci">@ E_ZIP</div><div class="ttdef"><b>定义</b> <a href="dl__memory_8h_source.html#l00025">dl_memory.h:25</a></div></div>
<div class="ttc" id="anamespacedl_1_1_memory_html_ab90b9a8c8acaf9740fd6b0ac82c90cfa"><div class="ttname"><a href="namespacedl_1_1_memory.html#ab90b9a8c8acaf9740fd6b0ac82c90cfa">dl::Memory::DecompressZip</a></div><div class="ttdeci">Buffer DecompressZip(BufferView src, size_t size_origin=0)</div><div class="ttdoc">解压缩数据,使用libz</div></div>
<div class="ttc" id="anamespacedl_1_1_tool_html"><div class="ttname"><a href="namespacedl_1_1_tool.html">dl::Tool</a></div><div class="ttdoc">常用工具</div><div class="ttdef"><b>定义</b> <a href="#l00022">dl_tool_archiver.h:23</a></div></div>
<div class="ttc" id="anamespacedl_1_1_tool_html_a0a1f6968b69d34a380fb44163593b798"><div class="ttname"><a href="namespacedl_1_1_tool.html#a0a1f6968b69d34a380fb44163593b798">dl::Tool::ARCHIVER_TYPE</a></div><div class="ttdeci">constexpr uint16_t ARCHIVER_TYPE</div><div class="ttdef"><b>定义</b> <a href="#l00024">dl_tool_archiver.h:24</a></div></div>
<div class="ttc" id="anamespacedl_1_1_tool_html_a8dd4a1fe6f469071630e78608ac5757e"><div class="ttname"><a href="namespacedl_1_1_tool.html#a8dd4a1fe6f469071630e78608ac5757e">dl::Tool::ARCHIVER_VERSION</a></div><div class="ttdeci">constexpr uint8_t ARCHIVER_VERSION</div><div class="ttdef"><b>定义</b> <a href="#l00025">dl_tool_archiver.h:25</a></div></div>
<div class="ttc" id="astructdl_1_1_tool_1_1_archiver_1_1_file_info_html"><div class="ttname"><a href="structdl_1_1_tool_1_1_archiver_1_1_file_info.html">dl::Tool::Archiver::FileInfo</a></div><div class="ttdef"><b>定义</b> <a href="#l00040">dl_tool_archiver.h:41</a></div></div>
<div class="ttc" id="astructdl_1_1_tool_1_1_archiver_1_1_file_info_html_a1b320a4b5ca738bd452c73331c658e76"><div class="ttname"><a href="structdl_1_1_tool_1_1_archiver_1_1_file_info.html#a1b320a4b5ca738bd452c73331c658e76">dl::Tool::Archiver::FileInfo::_size</a></div><div class="ttdeci">uint32_t _size</div><div class="ttdef"><b>定义</b> <a href="#l00043">dl_tool_archiver.h:43</a></div></div>
<div class="ttc" id="astructdl_1_1_tool_1_1_archiver_1_1_file_info_html_a36b8e8ad1a378f44860875c458b3baef"><div class="ttname"><a href="structdl_1_1_tool_1_1_archiver_1_1_file_info.html#a36b8e8ad1a378f44860875c458b3baef">dl::Tool::Archiver::FileInfo::_offset</a></div><div class="ttdeci">uint64_t _offset</div><div class="ttdef"><b>定义</b> <a href="#l00042">dl_tool_archiver.h:42</a></div></div>
<div class="ttc" id="astructdl_1_1_tool_1_1_archiver_1_1_file_info_html_a796109e19dc769155daf6d7317c10c23"><div class="ttname"><a href="structdl_1_1_tool_1_1_archiver_1_1_file_info.html#a796109e19dc769155daf6d7317c10c23">dl::Tool::Archiver::FileInfo::_crc</a></div><div class="ttdeci">uint32_t _crc</div><div class="ttdef"><b>定义</b> <a href="#l00044">dl_tool_archiver.h:44</a></div></div>
<div class="ttc" id="astructdl_1_1_tool_1_1_archiver_1_1_head_html"><div class="ttname"><a href="structdl_1_1_tool_1_1_archiver_1_1_head.html">dl::Tool::Archiver::Head</a></div><div class="ttdef"><b>定义</b> <a href="#l00031">dl_tool_archiver.h:32</a></div></div>
<div class="ttc" id="astructdl_1_1_tool_1_1_archiver_1_1_head_html_a2388db5ae979d8a669a1df6be0c3bc27"><div class="ttname"><a href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a2388db5ae979d8a669a1df6be0c3bc27">dl::Tool::Archiver::Head::_version</a></div><div class="ttdeci">uint8_t _version</div><div class="ttdef"><b>定义</b> <a href="#l00034">dl_tool_archiver.h:34</a></div></div>
<div class="ttc" id="astructdl_1_1_tool_1_1_archiver_1_1_head_html_a2b5d75430e7bb3f1d8a2d195c8cb21e0"><div class="ttname"><a href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a2b5d75430e7bb3f1d8a2d195c8cb21e0">dl::Tool::Archiver::Head::_sizeFileListCompress</a></div><div class="ttdeci">uint32_t _sizeFileListCompress</div><div class="ttdef"><b>定义</b> <a href="#l00037">dl_tool_archiver.h:37</a></div></div>
<div class="ttc" id="astructdl_1_1_tool_1_1_archiver_1_1_head_html_a64857ae9f5a38c6ba82eb20c2cefab7b"><div class="ttname"><a href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a64857ae9f5a38c6ba82eb20c2cefab7b">dl::Tool::Archiver::Head::_sizeFileBlock</a></div><div class="ttdeci">uint64_t _sizeFileBlock</div><div class="ttdef"><b>定义</b> <a href="#l00038">dl_tool_archiver.h:38</a></div></div>
<div class="ttc" id="astructdl_1_1_tool_1_1_archiver_1_1_head_html_a6cdb8bce66ea0c2a282ea77ab1f59903"><div class="ttname"><a href="structdl_1_1_tool_1_1_archiver_1_1_head.html#a6cdb8bce66ea0c2a282ea77ab1f59903">dl::Tool::Archiver::Head::_type</a></div><div class="ttdeci">uint16_t _type</div><div class="ttdef"><b>定义</b> <a href="#l00033">dl_tool_archiver.h:33</a></div></div>
<div class="ttc" id="astructdl_1_1_tool_1_1_archiver_1_1_head_html_aa495f63b8ab6408b50dd50ff7ace103d"><div class="ttname"><a href="structdl_1_1_tool_1_1_archiver_1_1_head.html#aa495f63b8ab6408b50dd50ff7ace103d">dl::Tool::Archiver::Head::_modeCompress</a></div><div class="ttdeci">uint8_t _modeCompress</div><div class="ttdef"><b>定义</b> <a href="#l00035">dl_tool_archiver.h:35</a></div></div>
<div class="ttc" id="astructdl_1_1_tool_1_1_archiver_1_1_head_html_af3c89612ea344455b33c94ab0afcb760"><div class="ttname"><a href="structdl_1_1_tool_1_1_archiver_1_1_head.html#af3c89612ea344455b33c94ab0afcb760">dl::Tool::Archiver::Head::_sizeFileList</a></div><div class="ttdeci">uint32_t _sizeFileList</div><div class="ttdef"><b>定义</b> <a href="#l00036">dl_tool_archiver.h:36</a></div></div>
<div class="ttc" id="astructdl_1_1_tool_1_1_archiver_1_1_param_html"><div class="ttname"><a href="structdl_1_1_tool_1_1_archiver_1_1_param.html">dl::Tool::Archiver::Param</a></div><div class="ttdef"><b>定义</b> <a href="#l00048">dl_tool_archiver.h:49</a></div></div>
<div class="ttc" id="astructdl_1_1_tool_1_1_archiver_1_1_param_html_a25796a4e4ac2c5622e83e45255b789b8"><div class="ttname"><a href="structdl_1_1_tool_1_1_archiver_1_1_param.html#a25796a4e4ac2c5622e83e45255b789b8">dl::Tool::Archiver::Param::_compressMode</a></div><div class="ttdeci">Memory::CompressMode _compressMode</div><div class="ttdef"><b>定义</b> <a href="#l00052">dl_tool_archiver.h:52</a></div></div>
<div class="ttc" id="astructdl_1_1_tool_1_1_archiver_1_1_param_html_a5e413ffcee8c105719434ca1d968af8b"><div class="ttname"><a href="structdl_1_1_tool_1_1_archiver_1_1_param.html#a5e413ffcee8c105719434ca1d968af8b">dl::Tool::Archiver::Param::_bCrc</a></div><div class="ttdeci">bool _bCrc</div><div class="ttdef"><b>定义</b> <a href="#l00053">dl_tool_archiver.h:53</a></div></div>
<div class="ttc" id="astructdl_1_1_tool_1_1_archiver_1_1_param_html_aa2efdcda624543ae2b42198a27b78fed"><div class="ttname"><a href="structdl_1_1_tool_1_1_archiver_1_1_param.html#aa2efdcda624543ae2b42198a27b78fed">dl::Tool::Archiver::Param::_out</a></div><div class="ttdeci">std::string _out</div><div class="ttdef"><b>定义</b> <a href="#l00051">dl_tool_archiver.h:51</a></div></div>
<div class="ttc" id="astructdl_1_1_tool_1_1_archiver_1_1_param_html_aee712f5ffe0d43d482ec1999e8a64f6c"><div class="ttname"><a href="structdl_1_1_tool_1_1_archiver_1_1_param.html#aee712f5ffe0d43d482ec1999e8a64f6c">dl::Tool::Archiver::Param::_src</a></div><div class="ttdeci">std::string _src</div><div class="ttdef"><b>定义</b> <a href="#l00050">dl_tool_archiver.h:50</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
制作者&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1
</small></address>
</div><!-- doc-content -->
</body>
</html>