﻿<?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++博客-My Note-随笔分类-Tools</title><link>http://www.cppblog.com/wxtnote/category/21084.html</link><description>专注 改善</description><language>zh-cn</language><lastBuildDate>Thu, 30 Jul 2015 10:30:41 GMT</lastBuildDate><pubDate>Thu, 30 Jul 2015 10:30:41 GMT</pubDate><ttl>60</ttl><item><title>为什么std::wstring不提供CString那样的Format的方法</title><link>http://www.cppblog.com/wxtnote/archive/2015/07/29/211410.html</link><dc:creator>wxt</dc:creator><author>wxt</author><pubDate>Wed, 29 Jul 2015 10:23:00 GMT</pubDate><guid>http://www.cppblog.com/wxtnote/archive/2015/07/29/211410.html</guid><wfw:comment>http://www.cppblog.com/wxtnote/comments/211410.html</wfw:comment><comments>http://www.cppblog.com/wxtnote/archive/2015/07/29/211410.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wxtnote/comments/commentRss/211410.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wxtnote/services/trackbacks/211410.html</trackback:ping><description><![CDATA[很多时候想使用字符串格式化输出，但是std::wstring偏偏没有提供这个方法。CString只存在于ATL/MFC，使用Win32平台没有CString可用，使用底层的spintf之类的函数，又时常担心buffer越界，写重复的越界检测之类的代码...所以这里把CString的Format方法搬了过来：<br />String.h<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;String&nbsp;:&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;std::wstring<br /><span style="color: #008080; ">2</span>&nbsp;{<br /><span style="color: #008080; ">3</span>&nbsp;<span style="color: #0000FF; ">public</span>:<br /><span style="color: #008080; ">4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Format(<span style="color: #0000FF; ">const</span>&nbsp;wchar_t*&nbsp;pszFormat,&nbsp;<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />);<br /><span style="color: #008080; ">5</span>&nbsp;<span style="color: #0000FF; ">protected</span>:<br /><span style="color: #008080; ">6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;FormatV(<span style="color: #0000FF; ">const</span>&nbsp;wchar_t*&nbsp;pszFormat,&nbsp;va_list&nbsp;args);<br /><span style="color: #008080; ">7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;GetFormattedLength(<span style="color: #0000FF; ">const</span>&nbsp;wchar_t*&nbsp;pszFormat,&nbsp;va_list&nbsp;args);<br /><span style="color: #008080; ">8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;Format(wchar_t*&nbsp;pszBuffer,&nbsp;ULONG&nbsp;nLength,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;wchar_t*&nbsp;pszFormat,&nbsp;va_list&nbsp;args);<br /><span style="color: #008080; ">9</span>&nbsp;};</div>String.cpp<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->std::wstring&nbsp;StrFormat(&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;wchar_t*&nbsp;pstrFormat,&nbsp;<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;WCHAR&nbsp;szBuffer[300]&nbsp;=&nbsp;{&nbsp;0&nbsp;};<br />&nbsp;&nbsp;&nbsp;&nbsp;va_list&nbsp;args;<br />&nbsp;&nbsp;&nbsp;&nbsp;va_start(args,&nbsp;pstrFormat);<br />&nbsp;&nbsp;&nbsp;&nbsp;::wvnsprintf(szBuffer,&nbsp;lengthof(szBuffer)&nbsp;-&nbsp;2,&nbsp;pstrFormat,&nbsp;args);<br />&nbsp;&nbsp;&nbsp;&nbsp;wcscat_s(szBuffer,&nbsp;300,&nbsp;L"\n");<br />&nbsp;&nbsp;&nbsp;&nbsp;va_end(args);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;szBuffer;<br />}<br /><br /><span style="color: #0000FF; ">void</span>&nbsp;String::Format(&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;wchar_t*&nbsp;pszFormat,&nbsp;<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;va_list&nbsp;arglist;<br />&nbsp;&nbsp;&nbsp;&nbsp;va_start(arglist,&nbsp;pszFormat);<br />&nbsp;&nbsp;&nbsp;&nbsp;FormatV(pszFormat,&nbsp;arglist);<br />&nbsp;&nbsp;&nbsp;&nbsp;va_end(arglist);<br />}<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;String::Format(&nbsp;wchar_t*&nbsp;pszBuffer,&nbsp;ULONG&nbsp;nLength,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;wchar_t*&nbsp;pszFormat,&nbsp;va_list&nbsp;args&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;vswprintf_s(pszBuffer,&nbsp;nLength,&nbsp;pszFormat,&nbsp;args);<br />}<br /><br /><span style="color: #0000FF; ">void</span>&nbsp;String::FormatV(&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;wchar_t*&nbsp;pszFormat,&nbsp;va_list&nbsp;args&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(pszFormat&nbsp;==&nbsp;NULL)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;ULONG&nbsp;nLength&nbsp;=&nbsp;GetFormattedLength(pszFormat,&nbsp;args);<br />&nbsp;&nbsp;&nbsp;&nbsp;wchar_t*&nbsp;pszBuffer&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;wchar_t[nLength&nbsp;+&nbsp;1];<br />&nbsp;&nbsp;&nbsp;&nbsp;::ZeroMemory(pszBuffer,&nbsp;nLength&nbsp;+&nbsp;1);<br />&nbsp;&nbsp;&nbsp;&nbsp;Format(pszBuffer,&nbsp;nLength&nbsp;+&nbsp;1,&nbsp;pszFormat,&nbsp;args);<br />&nbsp;&nbsp;&nbsp;&nbsp;std::wstring::<span style="color: #0000FF; ">operator</span>=(std::wstring(pszBuffer));<br />&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;[]pszBuffer;<br />}<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;String::GetFormattedLength(&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;wchar_t*&nbsp;pszFormat,&nbsp;va_list&nbsp;args&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;_vscwprintf(pszFormat,&nbsp;args);<br />}</div><br />以上代码在VS2008编译通过。<br /><img src ="http://www.cppblog.com/wxtnote/aggbug/211410.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wxtnote/" target="_blank">wxt</a> 2015-07-29 18:23 <a href="http://www.cppblog.com/wxtnote/archive/2015/07/29/211410.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>查看某个文件正在被哪些进程访问</title><link>http://www.cppblog.com/wxtnote/archive/2015/04/27/210460.html</link><dc:creator>wxt</dc:creator><author>wxt</author><pubDate>Mon, 27 Apr 2015 15:28:00 GMT</pubDate><guid>http://www.cppblog.com/wxtnote/archive/2015/04/27/210460.html</guid><wfw:comment>http://www.cppblog.com/wxtnote/comments/210460.html</wfw:comment><comments>http://www.cppblog.com/wxtnote/archive/2015/04/27/210460.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wxtnote/comments/commentRss/210460.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wxtnote/services/trackbacks/210460.html</trackback:ping><description><![CDATA[通过使用Sysinternals的procexp.exe工具提供的Process Explorer Search（菜单-&gt;Find-&gt;Find Handle or Dll或Ctrl+F）功能，我们可以看到某个文件正在被哪些进程使用。这个功能在你想删除某个文件，而系统提示&#8220;该文件正在被占用，不能删除&#8221;的时候非常有用。<br /><img src="http://www.cppblog.com/images/cppblog_com/wxtnote/Find3.jpg" width="458" height="341" alt="" /><img src ="http://www.cppblog.com/wxtnote/aggbug/210460.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wxtnote/" target="_blank">wxt</a> 2015-04-27 23:28 <a href="http://www.cppblog.com/wxtnote/archive/2015/04/27/210460.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>