﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-我希望你是我独家记忆-随笔分类-C++</title><link>http://www.cppblog.com/Hero/category/10044.html</link><description> 一段永远封存的记忆，随风而去</description><language>zh-cn</language><lastBuildDate>Tue, 06 Apr 2010 15:09:12 GMT</lastBuildDate><pubDate>Tue, 06 Apr 2010 15:09:12 GMT</pubDate><ttl>60</ttl><item><title>DLLMain简单介绍</title><link>http://www.cppblog.com/Hero/archive/2009/12/04/102537.html</link><dc:creator>Hero</dc:creator><author>Hero</author><pubDate>Fri, 04 Dec 2009 07:05:00 GMT</pubDate><guid>http://www.cppblog.com/Hero/archive/2009/12/04/102537.html</guid><wfw:comment>http://www.cppblog.com/Hero/comments/102537.html</wfw:comment><comments>http://www.cppblog.com/Hero/archive/2009/12/04/102537.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Hero/comments/commentRss/102537.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Hero/services/trackbacks/102537.html</trackback:ping><description><![CDATA[<p style="TEXT-INDENT: 2em">1&nbsp;&nbsp; DLL的进入/退出函数</p>
<p style="TEXT-INDENT: 2em">1.1 DllMain简介</p>
<p style="TEXT-INDENT: 2em">跟exe有个main或者WinMain入口函数一样，DLL也有一个入口函数，就是DllMain。以&#8220;DllMain&#8221;为关键字，来看看MSDN帮助文档怎么介绍这个函数的。</p>
<p style="TEXT-INDENT: 2em">The DllMain function is an optional method of entry into a dynamic-link library (DLL)。（简要翻译：对于动态链接库，DllMain是一个可选的入口函数。）这句话很重要，很多初学者可能都认为一个动态链接库肯定要有DllMain函数。其实不然，像很多仅仅包含资源信息的DLL是没有DllMain函数的。</p>
<p style="TEXT-INDENT: 2em">1.2 何时调用DllMain</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 系统是在什么时候调用DllMain函数的呢？静态链接时，或动态链接时调用LoadLibrary和FreeLibrary都会调用DllMain函数。DllMain的第三个参数fdwReason指明了系统调用Dll的原因，它可能是:</p>
<p style="TEXT-INDENT: 2em"><font color=#ff6600>DLL_PROCESS_ATTACH、</font></p>
<p style="TEXT-INDENT: 2em"><font color=#333399>DLL_PROCESS_DETACH、</font></p>
<p style="TEXT-INDENT: 2em"><font color=#800080>DLL_THREAD_ATTACH</font></p>
<p style="TEXT-INDENT: 2em"><font color=#008000>DLL_THREAD_DETACH。</font></p>
<p style="TEXT-INDENT: 2em">以下从这四种情况来分析系统何时调用了DllMain。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p style="TEXT-INDENT: 2em">1.2.1 DLL_PROCESS_ATTACH</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 大家都知道，一个程序要调用Dll里的函数，首先要先把DLL文件映射到进程的地址空间。要把一个DLL文件映射到进程的地址空间，有两种方法：静态链接和动态链接的LoadLibrary或者LoadLibraryEx。</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当一个DLL文件被映射到进程的地址空间时，系统调用该DLL的DllMain函数，传递的fdwReason参数为DLL_PROCESS_ATTACH。这种调用只会发生在第一次映射时。如果同一个进程后来为已经映射进来的DLL再次调用LoadLibrary或者LoadLibraryEx，操作系统只会增加DLL的使用次数，它不会再用DLL_PROCESS_ATTACH调用DLL的DllMain函数。不同进程用LoadLibrary同一个DLL时，每个进程的第一次映射都会用DLL_PROCESS_ATTACH调用DLL的DllMain函数。</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可参考DllMainTest的DLL_PROCESS_ATTACH_Test函数。</p>
<p style="TEXT-INDENT: 2em">1.2.2 DLL_PROCESS_DETACH</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当DLL被从进程的地址空间解除映射时，系统调用了它的DllMain，传递的fdwReason值是DLL_PROCESS_DETACH。当DLL处理该值时，它应该执行进程相关的清理工作。</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 那么什么时候DLL被从进程的地址空间解除映射呢？两种情况：</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ◆FreeLibrary解除DLL映射（<font color=#ff0000>有几个LoadLibrary，就要有几个FreeLibrary</font>）</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ◆进程结束而解除DLL映射，在进程结束前还没有解除DLL的映射，进程结束后会解除DLL映射。（如果进程的终结是因为调用了TerminateProcess，系统就不会用DLL_PROCESS_DETACH来调用DLL的DllMain函数。这就意味着DLL在进程结束前没有机会执行任何清理工作。）</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#0000ff>注意：当用DLL_PROCESS_ATTACH调用DLL的DllMain函数时，如果返回FALSE，说明没有初始化成功，系统仍会用DLL_PROCESS_DETACH调用DLL的DllMain函数。因此，必须确保清理那些没有成功初始化的东西。</font></p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可参考DllMainTest的DLL_PROCESS_DETACH_Test函数。</p>
<p style="TEXT-INDENT: 2em">1.2.3 DLL_THREAD_ATTACH</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当进程创建一线程时，系统查看当前映射到进程地址空间中的所有DLL文件映像，并用值DLL_THREAD_ATTACH调用DLL的DllMain函数。</p>
<p style="TEXT-INDENT: 2em">新创建的线程负责执行这次的DLL的DllMain函数，只有当所有的DLL都处理完这一通知后，系统才允许进程开始执行它的线程函数。</p>
<p style="TEXT-INDENT: 2em">注意跟DLL_PROCESS_ATTACH的区别，我们在前面说过，第n(n&gt;=2)次以后地把DLL映像文件映射到进程的地址空间时，是不再用DLL_PROCESS_ATTACH调用DllMain的。而DLL_THREAD_ATTACH不同，进程中的每次建立线程，都会用值DLL_THREAD_ATTACH调用DllMain函数，哪怕是线程中建立线程也一样。</p>
<p style="TEXT-INDENT: 2em">1.2.4 DLL_THREAD_DETACH</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果线程调用了ExitThread来结束线程（线程函数返回时，系统也会自动调用ExitThread），系统查看当前映射到进程空间中的所有DLL文件映像，并用DLL_THREAD_DETACH来调用DllMain函数，通知所有的DLL去执行线程级的清理工作。</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注意：如果线程的结束是因为系统中的一个线程调用了TerminateThread，系统就不会用值DLL_THREAD_DETACH来调用所有DLL的DllMain函数。</p>
<p style="TEXT-INDENT: 2em">1.3 为DllMain换名</p>
<p style="TEXT-INDENT: 2em">在早期的SDK版本中，DllMain是叫做DllEntryPoint。其实有一件鲜为人知的事：一个Dll的入口函数名是可以自己定义的。下面我将以VC++6.0为例来演示如何更改。首先要说明一点，虽然DllMain可以换成其他函数名，但函数的参数和返回值必须和DllMain一样。而且这个函数要为__stdcall类型（DllMain本身也是__stdcall类型）。</p>
<p style="TEXT-INDENT: 2em">打开VC++菜单Project\Settings\Link tab\ Output in the Category box，如下图，在Entry-point symbol中输入要替换DllMain的函数名（当然这个函数名是你程序中已经实现的函数）。Entry-point symbol是干么的呢？可以以关键字&#8220;Entry-point symbol&#8221;搜索MSDN帮助文档查看，搜索时，打钩&#8220;仅搜索标题&#8221;会更快定位。</p>
<p style="TEXT-INDENT: 2em"><img title="DllMain详解 - 生活 - 无敌" border=0 alt="DllMain详解 - 生活 - 无敌" src="http://p.blog.csdn.net/images/p_blog_csdn_net/benkaoya/1.jpg"></p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 按OK后，如果马上编译的话会出现如下错误：</p>
<p style="TEXT-INDENT: 2em">LIBCMTD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main</p>
<p style="TEXT-INDENT: 2em">Debug/Dll.dll : fatal error LNK1120: 1 unresolved externals</p>
<p style="TEXT-INDENT: 2em">打开VC++菜单Project\Settings\C/C++选项卡，如下图，在Project Options：末尾的地方添加&#8221;/D&#8221;（图中蓝色高亮的地方），要注意位置，我试了，要把/D放到/GZ后面也会链接错误，我也不懂为什么，^_^。按OK，再次编译，成功。大家可以自己测试下到底有没有更改成功，什么，如果测试？打出调式信息啊。</p>
<p style="TEXT-INDENT: 2em"><img title="DllMain详解 - 生活 - 无敌" border=0 alt="DllMain详解 - 生活 - 无敌" src="http://p.blog.csdn.net/images/p_blog_csdn_net/benkaoya/2.jpg"></p>
<p style="TEXT-INDENT: 2em">1.4 DisableThreadLibraryCalls</p>
<p style="TEXT-INDENT: 2em">看帮助就知道它是干么用的：</p>
<p style="TEXT-INDENT: 2em">The DisableThreadLibraryCalls function disables the DLL_THREAD_ATTACH and DLL_THREAD_DETACH notifications for the dynamic-link library (DLL) specified by hLibModule. This can reduce the size of the working co<wbr>de set for some applications.</p>
<img src ="http://www.cppblog.com/Hero/aggbug/102537.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Hero/" target="_blank">Hero</a> 2009-12-04 15:05 <a href="http://www.cppblog.com/Hero/archive/2009/12/04/102537.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>string wstring 转换</title><link>http://www.cppblog.com/Hero/archive/2009/10/10/98232.html</link><dc:creator>Hero</dc:creator><author>Hero</author><pubDate>Sat, 10 Oct 2009 05:47:00 GMT</pubDate><guid>http://www.cppblog.com/Hero/archive/2009/10/10/98232.html</guid><wfw:comment>http://www.cppblog.com/Hero/comments/98232.html</wfw:comment><comments>http://www.cppblog.com/Hero/archive/2009/10/10/98232.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Hero/comments/commentRss/98232.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Hero/services/trackbacks/98232.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: courier new; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000">std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;ws2s(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;std::wstring</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;ws)<br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;curLocale&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;setlocale(LC_ALL,&nbsp;NULL);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;curLocale&nbsp;=&nbsp;"C";</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;setlocale(LC_ALL,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">chs</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;wchar_t</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;_Source&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ws.c_str();<br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;_Dsize&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;ws.size()&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">_Dest&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">[_Dsize];<br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;memset(_Dest,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,_Dsize);<br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;wcstombs(_Dest,_Source,_Dsize);<br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;result&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;_Dest;<br></span><span style="COLOR: #008080">25</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;[]_Dest;<br></span><span style="COLOR: #008080">26</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;setlocale(LC_ALL,&nbsp;curLocale.c_str());<br></span><span style="COLOR: #008080">27</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;result;<br></span><span style="COLOR: #008080">28</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">29</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">30</span>&nbsp;<span style="COLOR: #000000">std::wstring&nbsp;s2ws(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;s)<br></span><span style="COLOR: #008080">31</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">32</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;setlocale(LC_ALL,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">chs</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&nbsp;<br></span><span style="COLOR: #008080">33</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;_Source&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;s.c_str();<br></span><span style="COLOR: #008080">34</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;_Dsize&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;s.size()&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">35</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;wchar_t&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">_Dest&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;wchar_t[_Dsize];<br></span><span style="COLOR: #008080">36</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;wmemset(_Dest,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;_Dsize);<br></span><span style="COLOR: #008080">37</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mbstowcs(_Dest,_Source,_Dsize);<br></span><span style="COLOR: #008080">38</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;std::wstring&nbsp;result&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;_Dest;<br></span><span style="COLOR: #008080">39</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;[]_Dest;<br></span><span style="COLOR: #008080">40</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;setlocale(LC_ALL,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">C</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">41</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;result;<br></span><span style="COLOR: #008080">42</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">43</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">44</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br></span><span style="COLOR: #008080">45</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">46</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;freopen(&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">data.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;stdin&nbsp;)&nbsp;;<br></span><span style="COLOR: #008080">47</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;freopen(&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">data.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;stdout&nbsp;)&nbsp;;<br></span><span style="COLOR: #008080">48</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">49</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">wcout.imbue(&nbsp;locale("chs")&nbsp;)&nbsp;;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">50</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;line&nbsp;;<br></span><span style="COLOR: #008080">51</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;wstring&nbsp;wline&nbsp;;<br></span><span style="COLOR: #008080">52</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;wstring&nbsp;oline&nbsp;;<br></span><span style="COLOR: #008080">53</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;VEC&nbsp;vec&nbsp;;<br></span><span style="COLOR: #008080">54</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">55</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;;<br></span><span style="COLOR: #008080">56</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(&nbsp;wchar_t&nbsp;)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;;<br></span><span style="COLOR: #008080">57</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">58</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(&nbsp;cin&nbsp;</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">&nbsp;line&nbsp;)<br></span><span style="COLOR: #008080">59</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">60</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">cout&nbsp;&lt;&lt;&nbsp;line&nbsp;&lt;&lt;&nbsp;endl&nbsp;;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">61</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">62</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wline&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;s2ws(&nbsp;line&nbsp;)&nbsp;;<br></span><span style="COLOR: #008080">63</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">64</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;ws2s(&nbsp;wline&nbsp;)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;;<br></span><span style="COLOR: #008080">65</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">66</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">wline.length();&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">&nbsp;)<br></span><span style="COLOR: #008080">67</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">68</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oline&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;wline[i]&nbsp;;<br></span><span style="COLOR: #008080">69</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oline&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;(wchar_t)(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)&nbsp;;<br></span><span style="COLOR: #008080">70</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">71</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">72</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;ws2s(&nbsp;oline&nbsp;)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;;<br></span><span style="COLOR: #008080">73</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">74</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">75</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;;<br></span><span style="COLOR: #008080">76</span>&nbsp;<span style="COLOR: #000000">}</span></div>
<img src ="http://www.cppblog.com/Hero/aggbug/98232.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Hero/" target="_blank">Hero</a> 2009-10-10 13:47 <a href="http://www.cppblog.com/Hero/archive/2009/10/10/98232.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tiny xml使用</title><link>http://www.cppblog.com/Hero/archive/2009/08/27/94541.html</link><dc:creator>Hero</dc:creator><author>Hero</author><pubDate>Thu, 27 Aug 2009 05:52:00 GMT</pubDate><guid>http://www.cppblog.com/Hero/archive/2009/08/27/94541.html</guid><wfw:comment>http://www.cppblog.com/Hero/comments/94541.html</wfw:comment><comments>http://www.cppblog.com/Hero/archive/2009/08/27/94541.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Hero/comments/commentRss/94541.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Hero/services/trackbacks/94541.html</trackback:ping><description><![CDATA[<br>转载自 <a href="http://www.cppblog.com/mzty/archive/2007/08/15/30057.html">http://www.cppblog.com/mzty/archive/2007/08/15/30057.html</a><br><br>Homepage: <a href="http://www.grinninglizard.com/tinyxml/"><u><font color=#0000ff>http://www.grinninglizard.com/tinyxml/</font></u></a><br>download：<a href="http://sourceforge.net/projects/tinyxml"><u><font color=#800080>http://sourceforge.net/projects/tinyxml</font></u></a>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">用mingw32-make前修改一下makefile文件,改为如下：</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"># DEBUG can be set to YES to include debugging info, or NO otherwise(不是DEBUG)<br>DEBUG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; := NO </p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"># PROFILE can be set to YES to include profiling info, or NO otherwise<br>PROFILE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; := NO</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"># TINYXML_USE_STL can be used to turn on STL support. NO, then STL<br># will not be used. YES will include the STL files.(使用STL,选择的话，则可以使用std::string)<br>TINYXML_USE_STL := YES</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">&nbsp;</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">一、TinyXml的特点 </p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">TinyXml是一个基于DOM模型的、非验证的轻量级C++解释器。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">1.SAX和DOM </p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">目前XML的解析主要有两大模型：SAX和DOM。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">其中SAX是基于事件的，其基本工作流程是分析XML文档，当发现了一个新的元素时，产生一个对应事件，并调用相应的用户处理函数。这种方式占用内存少，速度快，但用户程序相应得会比较复杂。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">而DOM（文档对象模型），则是在分析时，一次性的将整个XML文档进行分析，并在内存中形成对应的树结构，同时，向用户提供一系列的接口来访问和编辑该树结构。这种方式占用内存大，速度往往慢于SAX，但可以给用户提供一个面向对象的访问接口，对用户更为友好。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><br>2.验证和非验证 </p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">对于一个特定的XML文档而言，其正确性分为两个层次。首先是其格式应该符合XML的基本格式要求，比如第一行要有声明，标签的嵌套层次必须前后一致等等，符合这些要求的文件，就是一个合格的XML文件，称作well-formatted。但除此之外，一个XML文档因其内容的不同还必须在语义上符合相应的标准，这些标准由相应的DTD文件或者Schema文件来定义，符合了这些定义要求的XML文件，称作valid。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">因此，解析器也分为两种，一种是验证的，即会跟据XML文件中的声明，用相应的DTD文件对XML文件进行校验，检查它是否满足DTD文件的要求。另一种是忽略DTD文件，只要基本格式正确，就可以进行解析。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">就我所知，验证的解析器通常都是比较重量级的。TinyXml不支持验证，但是体积很小，用在解析格式较为简单的XML文件，比如配置文件时，特别的合适。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><br>二、TinyXml的构建和使用<br>1.获取 </p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">TinyXml首页在<a href="http://www.grinninglizard.com/tinyxml/index.html"><u><font color=#0000ff>http://www.grinninglizard.com/tinyxml/index.html</font></u></a>，从这里可以找到最新版本的源代码，目前的版本是 2.4.3 (截至2006.5.17).</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">2.构建 </p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">TinyXml在构建时可以选择是否支持STL，选择的话，则可以使用std::string，所以通常应在Windows上，TinyXml的源码包里提供了VC6的工程文件，直接用它就可以生成两个静该打开这个选项。态库（带STL和不带STL），非常容易。唯一需要注意的是，默认生成的库是单线程的，如果用在多线程的项目中，需要改动一下配置，生成相应的多线程库。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">在Unix平台上，TinyXml的源码包里只提供了一个Makefile，对于典型的Linux系统，或装了gcc和gmake的其他Unix，这个Makefile足够用了，我在RH9和RHEL4上测试，简单的make就成功了。需要注意的有以下几点：默认的编译是不支持STL的，可以通过编辑Makefile的TINYXML_USE_STL := NO那一行，把NO改成YES就可以支持STL了；还有默认只生成了一个测试程序，没有生成任何库，如果要生成静态库的话，可以用ar命令，将生成的几个目标文件打包就行了，如果要生成动态库，则需要加上-fpic参数重新编译。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">3.使用 </p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">构建了相应的库之后，在使用了它们的工程中，只要在连接时把他们连上就行了。需要注意的是，如果需要STL支持，在编译用到了TinyXml的文件时，需要定义一个宏TIXML_USE_STL，对gcc，可以使用参数-DTIXML_USE_STL，对cl.exe（VC），可以使用参数/DTIXML_USE_STL，如果嫌麻烦，可以直接定义在 tinyxml.h文件里。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><br>也可以把需要的源文件加入到我们的project中，向使用自己的文件一样的调用，一般为了更加方便使用，可以对库根据我们实际的数据结构进行再分装。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><br>三、TinyXml的编程模型</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">1.类之间的关系 </p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">TinyXml实现的时DOM访问模型，因此提供了一系列的类对应XML文件中的各个节点。主要类间的关系如下图所示：</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">TiXmlBase：其它类的基类，是个抽象类</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">TiXmlNode：表示一个节点，包含节点的一般方法，如访问自节点、兄弟节点、编辑自身、编辑子节点</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">TiXmlDocument：表示整个XML文档，不对应其中某个特定的节点。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">TiXmlElement：表示元素节点，可以包含子节点和TiXmlAttribute</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">TiXmlComment：表示注释</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">TiXmlDeclaration：表示声明</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">TiXmlText：表示文本节点</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">TiXmlUnknown：表示未知节点，通常是出错了</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">TiXmlAttribute：表示一个元素的属性</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">下面是一个简单的例子：</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">&lt;?xml version="1.0" encoding="utf-8" ?&gt; <br>&lt;!-This is only a sample--&gt; <br>&lt;book&gt; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;TinyXml How To&lt;/name&gt; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;price unit=&#8221;RMB&#8221;&gt;20&lt;/price&gt; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;description&gt;Some words&#8230;&lt;/description&gt; <br>&lt;/ book &gt; </p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><br>整个文档，对应TiXmlDocument</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">book,name,price, description，都对应TiXmlElement</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">第一行对应一个TiXmlDeclaration</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">第二行对应一个TiXmlComment</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">&#8220;TinyXml How To&#8221;对应一个TiXmlText</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">unit则是price的一个TiXmlAttribute</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">这些类与XML文件中的相应元素都有很好的对应关系，因此相信参照TinyXml的文档，可以很容易的掌握各个方法的使用。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><br>2.需要注意的问题 </p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">各类之间的转换 <br>由于各个节点类都从TiXmlNode继承，在使用时常常需要将TiXmlNode*类型的指针转换为其派生类的指针，在进行这种转换时，应该首先使用由TiXmlNode类提供的一系列转换函数，如ToElement(void)，而不是c++的dynamic_cast</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><br>检查返回值 <br>由于TinyXml是一个非校验的解析器，因此当解析一个文件时，很可能文件并不包含我们预期的某个节点，在这种情况下，TinyXml将返回空指针。因此，必须要对返回值进行检查，否则将很容易出现内存访问的错误。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><br>如何重头建立一个XML文件 <br>先建立一个TiXmlDocument对象，然后，载入某个模板，或者直接插入一个节点作为根节点，接着就可以像打开一个已有的XML文件那样对它进行操作了。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><br>四、总结 </p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">TinyXml最大的特点就是它很小，可以很方便的静态连接到程序里。对于像配置文件、简单的数据文件这类文件的解析，它很适合。但是由于它是非验证的，因此需要在程序里做许多检查工做，加重了程序编写的负担。因此对于复杂的XML文件，我觉得最好还是用验证的解析器来处理。<br></p>
<img src ="http://www.cppblog.com/Hero/aggbug/94541.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Hero/" target="_blank">Hero</a> 2009-08-27 13:52 <a href="http://www.cppblog.com/Hero/archive/2009/08/27/94541.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文件夹操作</title><link>http://www.cppblog.com/Hero/archive/2009/03/31/78467.html</link><dc:creator>Hero</dc:creator><author>Hero</author><pubDate>Tue, 31 Mar 2009 08:03:00 GMT</pubDate><guid>http://www.cppblog.com/Hero/archive/2009/03/31/78467.html</guid><wfw:comment>http://www.cppblog.com/Hero/comments/78467.html</wfw:comment><comments>http://www.cppblog.com/Hero/archive/2009/03/31/78467.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Hero/comments/commentRss/78467.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Hero/services/trackbacks/78467.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: courier new; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;&nbsp;1</span>&nbsp;<span style="COLOR: #008000">//</span><span style="COLOR: #008000">C++&nbsp;文件夹操作</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;&nbsp;2</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;&nbsp;3</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;&nbsp;4</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;&nbsp;5</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">direct.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">getcwd();&nbsp;chdir();</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;&nbsp;6</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">windows.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">GetModuleFileNameA();</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;&nbsp;7</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">io.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;&nbsp;8</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">vector</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;&nbsp;9</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">algorithm</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;10</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;11</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;12</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;13</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;size&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;14</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;15</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;cmp(&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;a,&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;b&nbsp;)<br></span><span style="COLOR: #008080">&nbsp;16</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;17</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;a.length()&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;b.length()&nbsp;)<br></span><span style="COLOR: #008080">&nbsp;18</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;a.length()&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;b.length()&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;19</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;20</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;strcmp(&nbsp;a.c_str(),&nbsp;b.c_str()&nbsp;)&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;21</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">&nbsp;22</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;23</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br></span><span style="COLOR: #008080">&nbsp;24</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;25</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;filePath&nbsp;;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">定义文件路径</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;26</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;fileName&nbsp;;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">定义文件名字</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;27</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;tPath[size]&nbsp;;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">临时变量</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;28</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;29</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">/获取当前执行文件路径</span><span style="COLOR: #808080"><br></span><span style="COLOR: #008080">&nbsp;30</span>&nbsp;<span style="COLOR: #808080"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::GetModuleFileNameA(&nbsp;NULL,&nbsp;tPath,&nbsp;size&nbsp;)&nbsp;;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">获取当前执行文件路径</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;31</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;32</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;filePath&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;tPath&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;33</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">filePath&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;filePath&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;34</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;35</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">获取当前工作目录&nbsp;--&nbsp;getcwd()</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;36</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;NULL&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;getcwd(&nbsp;tPath,&nbsp;size&nbsp;)&nbsp;)<br></span><span style="COLOR: #008080">&nbsp;37</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perror(&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">getcwd&nbsp;error&nbsp;!\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;)&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;38</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;39</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;tPath&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;40</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;filePath&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;tPath&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;41</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;42</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">更改当前工作目录&nbsp;--&nbsp;相对路径方式&nbsp;--&nbsp;chdir()</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;43</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;chdir(&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">../HLOJ</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;)&nbsp;)<br></span><span style="COLOR: #008080">&nbsp;44</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Unable&nbsp;to&nbsp;locate&nbsp;the&nbsp;directory&nbsp;you&nbsp;specified&nbsp;!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;45</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;46</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">&nbsp;47</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getcwd(&nbsp;tPath,&nbsp;size&nbsp;)&nbsp;;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">重新获取当前工作目录</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;48</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">The&nbsp;CWD&nbsp;is&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;tPath&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">输出当前工作目录&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;49</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;system(&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">type&nbsp;HLOJ_1130.cpp</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;)&nbsp;;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">system执行DOS指令</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;50</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">&nbsp;51</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;52</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">更改当前工作目录&nbsp;--&nbsp;绝对路径方式&nbsp;--&nbsp;chdir()</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;53</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;chdir(&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">D:\\wang</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;)&nbsp;)<br></span><span style="COLOR: #008080">&nbsp;54</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Unable&nbsp;to&nbsp;locate&nbsp;the&nbsp;directory&nbsp;you&nbsp;specified&nbsp;!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;55</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;56</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">&nbsp;57</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getcwd(&nbsp;tPath,&nbsp;size&nbsp;)&nbsp;;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">重新获取当前工作目录</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;58</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;tPath&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;59</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;system(&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">dir&nbsp;*.bat</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;)&nbsp;;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">dir&nbsp;D:/wang</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;60</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">&nbsp;61</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;62</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">查找当前目录中符合要求的文件，并且输出文件的相关信息&nbsp;--&nbsp;IO.h</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;63</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;hFile&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;64</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;_finddata_t&nbsp;fileInfo&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;65</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;66</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;vec&nbsp;;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">用于保存文件名字&nbsp;--&nbsp;可排序用</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;67</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;68</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;vec.clear()&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;69</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;(hFile&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;_findfirst(&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">*.txt</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">fileInfo&nbsp;))&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;EOF&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;70</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">&nbsp;71</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;72</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">&nbsp;73</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">(fileInfo.attrib&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;_A_SUBDIR&nbsp;)&nbsp;)</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">检查是否是目录</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;74</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">&nbsp;75</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;fileInfo.name&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;fileInfo.size&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Bytes</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;76</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec.push_back(&nbsp;fileInfo.name&nbsp;)&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;77</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">&nbsp;78</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;_findnext(&nbsp;hFile,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">fileInfo&nbsp;)&nbsp;)&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;79</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;80</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_findclose(&nbsp;hFile&nbsp;)&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;81</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">&nbsp;82</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;83</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;sort(&nbsp;vec.begin(),&nbsp;vec.end(),&nbsp;cmp&nbsp;)&nbsp;;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">对文件从小到大排序</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;84</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(&nbsp;vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::iterator&nbsp;it</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">vec.begin();&nbsp;it</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">vec.end();&nbsp;it</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">&nbsp;)<br></span><span style="COLOR: #008080">&nbsp;85</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">&nbsp;86</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">it&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;87</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">&nbsp;88</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">*****************************************************</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;89</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;90</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">查找当前目录中符合要求的文件，并且输出文件的相关信息&nbsp;--&nbsp;底层</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;91</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;92</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;_getcwd(&nbsp;tPath,&nbsp;size&nbsp;)&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;93</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;tPath&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;94</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;95</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;WIN32_FIND_DATAA&nbsp;findData&nbsp;;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">定义文件结构变量</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;96</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;::ZeroMemory(&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">findData,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(findData)&nbsp;)&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;97</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;98</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;fileCnt&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;99</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;hFind&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;::FindFirstFileA(&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">*.txt</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">findData&nbsp;)&nbsp;;<br></span><span style="COLOR: #008080">100</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">if(&nbsp;hFind&nbsp;!=&nbsp;INVALID_HANDLE_VALUE&nbsp;&nbsp;)</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">失败返回INVALID_HANDLE_VALUE</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">101</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;hFind&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;(HANDLE)EOF&nbsp;)<br></span><span style="COLOR: #008080">102</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">103</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">104</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">105</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;findData.cFileName[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]&nbsp;)&nbsp;</span><span style="COLOR: #0000ff">continue</span><span style="COLOR: #000000">&nbsp;;<br></span><span style="COLOR: #008080">106</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">107</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;fileSize&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">)(findData.nFileSizeHigh</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">32</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">108</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;findData.nFileSizeLow&nbsp;;<br></span><span style="COLOR: #008080">109</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">fileCnt&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;findData.cFileName&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">***</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;fileSize&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl&nbsp;;<br></span><span style="COLOR: #008080">110</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(&nbsp;FindNextFileA(&nbsp;hFind,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">findData&nbsp;)&nbsp;)&nbsp;;<br></span><span style="COLOR: #008080">111</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">112</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FindClose(&nbsp;hFind&nbsp;)&nbsp;;<br></span><span style="COLOR: #008080">113</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">114</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">115</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;;<br></span><span style="COLOR: #008080">116</span>&nbsp;<span style="COLOR: #000000">}</span></div>
<img src ="http://www.cppblog.com/Hero/aggbug/78467.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Hero/" target="_blank">Hero</a> 2009-03-31 16:03 <a href="http://www.cppblog.com/Hero/archive/2009/03/31/78467.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>