<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_bingxuefly</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/22661/rss</id><updated>2011-11-13T04:04:24Z</updated><author><name>飞天名猪</name><uri>http://www.cnblogs.com/bingxuefly/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bingxuefly/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/22661/rss"/><entry><id>http://www.cnblogs.com/bingxuefly/archive/2011/11/13/2247133.html</id><title type="text">Windows7系统命令总结</title><summary type="text">win7 命令大全</summary><published>2011-11-13T04:04:00Z</published><updated>2011-11-13T04:04:00Z</updated><author><name>飞天名猪</name><uri>http://www.cnblogs.com/bingxuefly/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bingxuefly/archive/2011/11/13/2247133.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bingxuefly/archive/2011/11/13/2247133.html"/><content type="html">&lt;p&gt;wmic os assoc 可以用来查看win7上已经安装的补丁的信息。&lt;/p&gt;&lt;p&gt;善于利用wmic命令，可以为更方便的管理win7系统打开一扇窗， wmic命令的强大并不次于cmd&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;运行命令行：&amp;#8220;winver&amp;#8221;，可以查询windows版本的信息&lt;br /&gt;&amp;nbsp;&amp;nbsp; 也可以输入以下命令查询高级信息：&lt;br /&gt;&amp;nbsp;&amp;nbsp; 1. slmgr.vbs -dli&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 显示：操作系统版本、部分产品密钥、许可证状态&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 2. slmgr.vbs -dlv&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 显示：最为详尽的激活信息，包括：激活ID、安装ID、激活截止日期&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 3. slmgr.vbs -xpr&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 显示：是否彻底激活&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 4. slmgr.vbs -ipk&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 更换Windows 7 序列号&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 5. slmgr.vbs -ato&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 激活Windows 7 &lt;/p&gt;&lt;p&gt;ASSOC 显示或修改文件扩展名关联。&lt;br /&gt;ATTRIB 显示或修改文件属性。通常文件有h,s,r等属性，分别表示隐藏、系统和只读。+h表示增加隐藏属性，-h表示去除隐藏属性。&lt;br /&gt;BREAK 设置或清除 DOS 系统的扩展 CTRL+C 检测。这个命令是为了与 DOS 系统的兼容而保留的，在Windows里不起作用。&lt;br /&gt;&lt;font color="#ff0000"&gt;BCDBOOT*&lt;/font&gt; 将关键启动文件复制到系统分区以及创建新的系统 BCD 存储。&lt;br /&gt;BCDEDIT 用于修改启动配置数据存储。&lt;br /&gt;CACLS 显示或者修改文件的访问控制列表(ACL)。注意: windows不推荐使用 Cacls，请使用 Icacls。&lt;br /&gt;&lt;font color="#008000"&gt;CALL&lt;/font&gt; 从批处理程序调用另一个批处理程序。&lt;br /&gt;&lt;font color="#008000"&gt;CD&lt;/font&gt; 显示当前目录名或改变当前目录。&lt;br /&gt;&lt;font color="#008000"&gt;CHCP&lt;/font&gt; 显示或设置活动代码页编号。比如中文是936。在以前版本比如98的时代，为了在使cmd具有多语言而设置了活动代码页，输入chcp 936就可以把cmd里的帮助等信息变成中文。&lt;br /&gt;&lt;font color="#008000"&gt;CHDIR&lt;/font&gt; 显示当前目录名或改变当前目录。是CD的全称。&lt;br /&gt;&lt;font color="#008000"&gt;CHKDSK&lt;/font&gt; 检查磁盘并显示状态报告。&lt;br /&gt;CHKNTFS 启动时显示或修改磁盘检查。&lt;br /&gt;&lt;font color="#008000"&gt;CHOICE&lt;/font&gt; 这个比较复杂，具体用法参见任意批处理文件教程。该工具允许用户从选择列表选择一个项目并返回所选项目的索引。 &lt;br /&gt;CIPHER 显示或更改 NTFS 分区上的目录[文件]的加密。&lt;br /&gt;CLIP 将命令行工具的输出重定向到 Windows 剪贴板。这个文本输出可以被粘贴到其他程序中。比如DIR|CLIP将一份当前目录列表的副本放入 Windows 剪贴板。CLIP &amp;lt; README.TXT 将 readme.txt 的一份文本放入 Windows 剪贴板。&amp;#8220;|&amp;#8221;在DOS中叫管道，"&amp;lt;"或"&amp;gt;"在DOS中又叫重定向，这个不用小钰多说了吧。&lt;br /&gt;&lt;font color="#008000"&gt;CLS&lt;/font&gt; 大名鼎鼎的清屏命令。&lt;br /&gt;CMD 启动 Windows 命令解释器的一个新实例。&lt;br /&gt;CMDKEY 创建，显示和删除保存的用户名和密码。这个小钰没怎么用过，小钰用的还是老式的net user命令，有兴趣的可以研究一下。&lt;br /&gt;COLOR 设置默认的控制台前景和背景颜色。&lt;br /&gt;COMP 比较两个文件或两个文件集的内容。&lt;br /&gt;COMPACT 显示或改变 NTFS 分区上文件的压缩。&lt;br /&gt;&lt;font color="#008000"&gt;CONVERT&lt;/font&gt; 将 FAT 卷转换为 NTFS。2000/xp时代比较流行的命令，因为当时大多都是FAT32格式的磁盘。&lt;br /&gt;&lt;font color="#008000"&gt;COPY &lt;/font&gt;将一份或多份文件复制到另一个位置。在Vista中有增强，具体看使用说明。&lt;br /&gt;&lt;font color="#008000"&gt;DATE&lt;/font&gt; 显示或设置日期。&lt;br /&gt;DEFRAG Microsoft 磁盘碎片整理程序。 &lt;br /&gt;&lt;font color="#008000"&gt;DEL&lt;/font&gt; 删除一个或数个文件。具体用法也可以参见国家计算机一级考试（DOS）教程。&lt;br /&gt;&lt;font color="#008000"&gt;DIR&lt;/font&gt; 显示目录中的文件和子目录列表。非常常用的命令。以前经常有人一来就打个dir/s，然后屏幕就开始滚，不明白的人一看以为高手来了。&lt;br /&gt;DISKCOMP 比较两张软盘的内容。基本已废弃。&lt;br /&gt;DISKCOPY 把一张软盘的内容复制到另一张。以上两个命令老得可以进军博了。&lt;br /&gt;DISKPART 显示或配置磁盘属性。这个命令不带参数，直接执行，之后会出现一个新的控制台让你输入命令。&lt;br /&gt;&lt;font color="#008000"&gt;DOSKEY&lt;/font&gt; 编辑命令行，重新调用 Windows 命令，并创建宏。很有意思的一个命令，比如以前为了防止坏人或病毒格式化计算机，就会用doskey做一个format或fdisk来替代真在的命令。&lt;br /&gt;DRIVERQUERY 允许管理员显示已安装设备驱动程序的列表，可以连接远程计算机使用。&lt;br /&gt;&lt;font color="#008000"&gt;ECHO&lt;/font&gt; 显示信息，或将命令回显打开或关上。&lt;br /&gt;&lt;font color="#008000"&gt;ENDLOCAL&lt;/font&gt; 结束批处理文件中环境改动的本地化操作。在执行ENDLOCAL 之后所做的环境改动不再仅限于批处理文件。批处理文件结束后，原先的设置无法还原。&lt;br /&gt;&lt;font color="#008000"&gt;ERASE &lt;/font&gt;删除一个或数个文件。已被del替代。&lt;br /&gt;&lt;font color="#008000"&gt;EXIT&lt;/font&gt; 退出 CMD.EXE 程序(命令解释器)或当前批处理脚本。&lt;br /&gt;&lt;font color="#008000"&gt;EXPAND&lt;/font&gt; Microsoft文件扩展实用程序版本。展开一个或多个压缩文件。&lt;br /&gt;&lt;font color="#008000"&gt;FC&lt;/font&gt; 比较两个文件或两个文件集并显示它们之间的不同。&lt;br /&gt;&lt;font color="#008000"&gt;FIND&lt;/font&gt; 在文件中搜索字符串。如果没有指定路径，FIND 将搜索在提示符处键入的文本或者由另一命令产生的文本。通常与管道命令或重定向命令配合使用。&lt;br /&gt;FINDSTR 在文件中寻找字符串。用法比较复杂。&lt;br /&gt;&lt;font color="#008000"&gt;FOR&lt;/font&gt; 对一组文件中的每一个文件执行某个特定命令。注意，这个可不是编程里面的循环的意思哦。这个用法也比较复杂，具体参见批处理教程。&lt;br /&gt;FORFILES 选择一个文件(或一组文件)并在那个文件上执行一个命令。这有助于批处理作业。. &lt;br /&gt;&lt;font color="#008000"&gt;FORMAT&lt;/font&gt; 格式化磁盘。需慎用。&lt;br /&gt;FSUTIL 显示或配置文件系统的属性，需要有管理权限。&lt;br /&gt;FTYPE 显示或修改用在文件扩展名关联中的文件类型。在自带的帮助中有详细的用法说明。&lt;br /&gt;&lt;font color="#008000"&gt;GOTO&lt;/font&gt; 将 cmd.exe 定向到批处理程序中带标签的行。&lt;br /&gt;&lt;font color="#ff0000"&gt;GPRESULT&lt;/font&gt; 此命令行工具显示目标用户和计算机的策略结果集 (RSoP) 的信息。&lt;br /&gt;GRAFTABL 让windows在图像模式下可以显示扩展字符集。不懂~~&lt;br /&gt;HELP 这个不用说了嘛，你键入之后回车就明白了。&lt;br /&gt;&lt;font color="#ff0000"&gt;ICACLS&lt;/font&gt; 显示，修改或备份ACL文件或文件夹。这个命令比较深奥，一般也用不着。&lt;br /&gt;&lt;font color="#008000"&gt;IF&lt;/font&gt; 执行批处理程序中的条件处理。&lt;br /&gt;&lt;strong&gt;IPCONFIG &lt;/strong&gt;显示所有当前TCP/IP连接的配置值。 &lt;br /&gt;LABEL 创建、更改或删除磁盘的卷标。&lt;br /&gt;&lt;font color="#008000"&gt;MD&lt;/font&gt; 创建目录。在Vista中可以同时建立多级目录，比如md father/son，则会在当前目录建立father目录，其下建立son目录。&lt;br /&gt;&lt;font color="#008000"&gt;MKDIR&lt;/font&gt; 同上，是MD的全称。&lt;br /&gt;&lt;font color="#ff0000"&gt;MKLINK&lt;/font&gt; 创建符号链接和硬连接。哎~~这简直在抄袭Linux的概念的嘛。符号连接和硬连接在linux下很常用，其概念类似于快捷方式，但不完全相同。建议google一下学习学习，非常有用哦。&lt;br /&gt;MODE 配置系统设备。没用过~~&lt;br /&gt;&lt;font color="#008000"&gt;MORE&lt;/font&gt; 逐屏显示输出。配合管道命令使用。比如你用dir/s浏览文件和目录，一屏显示不完的话可以用dir /s | more 当一屏满了之后暂停。&lt;br /&gt;MOVE 移动文件并重命名文件和目录。DOS下的剪切命令。&lt;br /&gt;&lt;font color="#ff0000"&gt;OPENFILES&lt;/font&gt; 允许管理员列出或中断系统上已打开的文件和文件夹。&lt;br /&gt;&lt;font color="#008000"&gt;PATH &lt;/font&gt;为可执行文件显示或设置一个搜索路径。&lt;br /&gt;&lt;font color="#008000"&gt;PAUSE&lt;/font&gt; 暂停批处理程序，并显示以下消息: 请按任意键继续. . ..&lt;br /&gt;POPD 更改到 PUSHD 命令存储的目录。如果启用，从推目录堆栈 POPD 驱动器时，POPD命令会删除 PUSHD 创建的临时驱动器号。这个小钰也不是很懂~~~&lt;br /&gt;PRINT 打印文本文件。&lt;br /&gt;&lt;font color="#008000"&gt;PROMPT&lt;/font&gt; 配置命令解释器显示的字符或格式。&lt;br /&gt;PUSHD 保存当前目录以供 POPD 命令使用，然后改到指定的目录。和POPD配合使用。&lt;br /&gt;&lt;font color="#008000"&gt;RD&lt;/font&gt; 删除一个文件夹，注意，必须是空文件夹。&lt;br /&gt;RECOVER 从损坏的磁盘中恢复可读取的信息。没用过，不知效果如何。&lt;br /&gt;&lt;font color="#008000"&gt;REM&lt;/font&gt; 在批处理文件或 CONFIG.SYS 里加上注解或说明。&lt;br /&gt;&lt;font color="#008000"&gt;REN&lt;/font&gt; 重命名文件。&lt;br /&gt;&lt;font color="#008000"&gt;RENAME&lt;/font&gt; 重命名文件。是REN的全称。&lt;br /&gt;&lt;font color="#008000"&gt;REPLACE &lt;/font&gt;替换文件。&lt;br /&gt;&lt;font color="#008000"&gt;RMDIR&lt;/font&gt; 删除文件夹，同RD，但是可以除目录本身外，还将删除指定目录下的所有子目录和文件。用于删除目录树。&lt;br /&gt;&lt;font color="#ff0000"&gt;ROBOCOPY&lt;/font&gt; Windows的可靠文件复制，功能强大，可以复制目录树。&lt;br /&gt;&lt;font color="#008000"&gt;SET &lt;/font&gt;显示、设置或删除 cmd.exe 环境变量。&lt;br /&gt;SETLOCAL 开始批处理文件中环境改动的本地化操作。在执行 SETLOCAL 之后所做的环境改动只限于批处理文件。要还原原先的设置，必须执行 ENDLOCAL。达到批处理文件结尾时，对于该批处理文件的每个尚未执行的 SETLOCAL 命令，都会有一个隐含的 ENDLOCAL 被执行。&lt;br /&gt;&lt;font color="#ff0000"&gt;SETX&lt;/font&gt; 在用户或系统环境创建或修改环境变量。能基于参数、注册表项或文件输入设置变量。&lt;br /&gt;&lt;font color="#000000"&gt;SC&lt;/font&gt; SC 是用于与服务控制管理器和服务进行通信的命令行程序。可以查询、启动或终止服务。Win2000的时候就有了。&lt;br /&gt;&lt;strong&gt;SCHTASKS&lt;/strong&gt; 允许管理员创建、删除、查询、更改、运行和中止本地或远程系统上的计划任务。非常有用。&lt;br /&gt;SHIFT 更改批处理文件中可替换参数的位置。&lt;br /&gt;SHUTDOWN 关机。有些病毒就是调用这个程序来关机。记住当你看见关机提示的时候可以输入shutdown -a取消。&lt;br /&gt;SORT 排序后输出。与管道命令配合使用。&lt;br /&gt;START 启动一个单独的窗口运行指定的程序或命令。&lt;br /&gt;&lt;font color="#008000"&gt;SUBST&lt;/font&gt; 将路径与驱动器号关联。这个命令也很有意思。&lt;br /&gt;SYSTEMINFO 显示系统信息。很强大。&lt;br /&gt;TAKEOWN 可以重新分配文件所有权，允许管理员重新获取先前被拒绝访问的文件访问权。&lt;br /&gt;TASKLIST 该工具显示在本地或远程机器上当前运行的进程列表。也很有用，特别是远程。&lt;br /&gt;TASKKILL 先用TASKLIST获得PID，让后使用该工具按照进程 ID (PID) 或映像名称终止任务。&lt;br /&gt;TIME 显示或设置系统时间。&lt;br /&gt;TIMEOUT 这个工具接受超时参数，等候一段指定的时间(秒)或等按任意键。它还接受一个参数，忽视按键。&lt;br /&gt;TITLE 指定命令提示窗口的标题。&lt;br /&gt;TREE 以图形显示驱动器或路径的文件夹结构。&lt;br /&gt;TYPE 显示文本文件的内容。&lt;br /&gt;&lt;font color="#008000"&gt;VER&lt;/font&gt; 显示当前windows的版本。它还有个图形界面，输入winver就可以看到。&lt;br /&gt;VERIFY 告诉 cmd.exe 是否要验证文件是否已正确地写入磁盘。&lt;br /&gt;&lt;font color="#008000"&gt;VOL&lt;/font&gt; 显示磁盘卷标和序列号(如果存在的话)。&lt;br /&gt;&lt;font color="#ff0000"&gt;VSSADMIN&lt;/font&gt; 卷影复制服务管理命令行工具&lt;br /&gt;&lt;font color="#008000"&gt;WHERE&lt;/font&gt; 用于批处理。显示符合搜索模式的文件位置。在默认情况下，搜索是在当前目录和 PATH 环境变量指定的路径中执行的。&lt;br /&gt;&lt;font color="#008000"&gt;XCOPY&lt;/font&gt; 复制文件或文件夹。现在你可以用robocopy来代替它。&lt;br /&gt;&lt;font color="#ff0000"&gt;WMIC&lt;/font&gt; 显示命令提示符里的WMI信息。 &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Win7/Vista中善用net/netstat命令成安全高手 &lt;/p&gt;&lt;p&gt;一些基本的命令往往可以在保护网络安全上起到很大的作用，下面几条命令的作用就非常突出。 &lt;br /&gt;检测网络连接 &lt;br /&gt;如果你怀疑自己的计算机上被别人安装了木马，或者是中了病毒，但是手里没有完善的工具来检测是不是真有这样的事情发生，那可以使用Windows自带的网络命令来看看谁在连接你的计算机。具体的命令格式是：netstat -an 这个命令能看到所有和本地计算机建立连接的IP，它包含四个部分&amp;#8212;&amp;#8212;proto(连接方式)、local address(本地连接地址)、foreign address(和本地建立连接的地址)、state(当前端口状态)。通过这个命令的详细信息，我们就可以完全监控计算机上的连接，从而达到控制计算机的目的。&lt;/p&gt;&lt;p&gt;我们在命令提示符中输入如下：netstat -a 显示出你的计算机当前所开放的所有端口 ，netstat -s -e 比较详细的显示你的网络资料，包括TCP、UDP、ICMP 和 IP的统计等大家可能都见过了。那有没有想过更胜层次的了解&lt;a href="http://www.vista123.com/" rel="nofollow" target="_blank"&gt;&lt;font color="#c89ceb"&gt;Vista&lt;/font&gt;&lt;/a&gt;、&lt;a href="http://www.win7china.com/" rel="nofollow" target="_blank"&gt;&lt;font color="#c89ceb"&gt;Windows7&lt;/font&gt;&lt;/a&gt;显示协议统计和当前 TCP/IP 网络连接的知识呢？&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.vista123.com/" rel="nofollow"&gt;&lt;font color="#c89ceb"&gt;Vista之家&lt;/font&gt;&lt;/a&gt;（&lt;a href="http://www.vista123.com/" rel="nofollow"&gt;&lt;font color="#c89ceb"&gt;www.vista123.com&lt;/font&gt;&lt;/a&gt;）和&lt;a href="http://www.win7china.com/" rel="nofollow" target="_blank"&gt;&lt;font color="#c89ceb"&gt;Windows7之家&lt;/font&gt;&lt;/a&gt;（&lt;a href="http://www.win7china.com/" rel="nofollow" target="_blank"&gt;&lt;font color="#c89ceb"&gt;www.win7china.com&lt;/font&gt;&lt;/a&gt;）团队特别整理netstat命令用法如下（提示：其中按有a-b的顺序排列）&amp;#8212;&amp;#8212;&lt;/p&gt;&lt;p&gt;NETSTAT：&lt;a href="http://www.vista123.com/" rel="nofollow" target="_blank"&gt;&lt;font color="#c89ceb"&gt;Vista&lt;/font&gt;&lt;/a&gt; / &lt;a href="http://www.win7china.com/" rel="nofollow" target="_blank"&gt;&lt;font color="#c89ceb"&gt;Windows7&lt;/font&gt;&lt;/a&gt; 下显示协议统计和当前 TCP/IP 网络连接。可以直接运行netstat不加参数，如图：&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://img.win7china.com/NewsUploadFiles/20091125_110628_718_u.jpg" __1321156289406__="ev_4216925805" /&gt;&lt;/p&gt;&lt;p&gt;NETSTAT [-a] [-b] [-e] [-f] [-n] [-o] [-p proto] [-r] [-s] [-t] [interval]&lt;/p&gt;&lt;p&gt;-a 显示所有连接和侦听端口。&lt;/p&gt;&lt;p&gt;-b 显示在创建每个连接或侦听端口时涉及的可执行程序。在某些情况下，已知可执行程序承载多个独立的组件，这些情况下，显示&lt;/p&gt;&lt;p&gt;创建连接或侦听端口时涉及的组件序列。此情况下，可执行程序的名称位于底部[]中，它调用的组件位于顶部，直至达 到 TCP/IP。注意，此选&lt;/p&gt;&lt;p&gt;项可能很耗时，并且在您没有足够权限时可能失败。&lt;/p&gt;&lt;p&gt;-e 显示以太网统计。此选项可以与 -s 选项结合使用。&lt;/p&gt;&lt;p&gt;-f 显示外部地址的完全限定域名(FQDN)。&lt;/p&gt;&lt;p&gt;-n 以数字形式显示地址和端口号。&lt;/p&gt;&lt;p&gt;-o 显示拥有的与每个连接关联的进程 ID。&lt;/p&gt;&lt;p&gt;-p proto 显示 proto 指定的协议的连接；proto 可以是下列任何一个: TCP、UDP、TCPv6 或 UDPv6。如果与 -s 选项一起用来显示每个协&lt;/p&gt;&lt;p&gt;议的统计，proto 可以是下列任何一个: IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP或 UDPv6。&lt;/p&gt;&lt;p&gt;-r 显示路由表。&lt;/p&gt;&lt;p&gt;-s 显示每个协议的统计。默认情况下，显示 IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的统计；-p 选项可用于指定默&lt;/p&gt;&lt;p&gt;认的子网。&lt;/p&gt;&lt;p&gt;-t 显示当前连接卸载状态。&lt;/p&gt;&lt;p&gt;interval 重新显示选定的统计，各个显示间暂停的间隔秒数。按 CTRL+C 停止重新显示统计。&lt;br /&gt;禁用不明服务 &lt;br /&gt;很多朋友在某天系统重新启动后会发现计算机速度变慢了，这个时候很可能是别人通过入侵你的计算机后给你开放了特别的某种服务，比如IIS信息服务等。可以通过&amp;#8220;net start&amp;#8221;来查看系统中究竟有什么服务在开启，如果发现了不是自己开放的服务，我们就可以有针对性地禁用这个服务了。方法就是直接输入&amp;#8220;net start&amp;#8221;来查看服务，再用&amp;#8220;net stop server&amp;#8221;来禁止服务。 &lt;br /&gt;轻松检查账户 &lt;br /&gt;很长一段时间，恶意的攻击者非常喜欢使用克隆账号的方法来控制你的计算机。他们采用的方法就是激活一个系统中的默认账户，但这个账户是不经常用的，然后使用工具把这个账户提升到管理员权限，从表面上看来这个账户还是和原来一样，但是这个克隆的账户却是系统中最大的安全隐患。恶意的攻击者可以通过这个账户任意地控制你的计算机。为了避免这种情况，可以用很简单的方法对账户进行检测。 &lt;br /&gt;首先在命令行下输入net user，查看计算机上有些什么用户，然后再使用&amp;#8220;net user+用户名&amp;#8221;查看这个用户是属于什么权限的，一般除了Administrator是administrators组的，其他都不是!如果你发现一个系统内置的用户是属于administrators组的，那几乎肯定你被入侵了，而且别人在你的计算机上克隆了账户。快使用&amp;#8220;net user 用户名/del&amp;#8221;来删掉这个用户吧! &lt;/p&gt;&lt;img src="http://www.cnblogs.com/bingxuefly/aggbug/2247133.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bingxuefly/archive/2011/11/13/2247133.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bingxuefly/archive/2010/10/27/1862429.html</id><title type="text">VC 编程ANSI环境下读写Unicode文件(转载)</title><summary type="text">VC 编程ANSI环境下读写Unicode文件(转载)</summary><published>2010-10-27T03:27:00Z</published><updated>2010-10-27T03:27:00Z</updated><author><name>飞天名猪</name><uri>http://www.cnblogs.com/bingxuefly/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bingxuefly/archive/2010/10/27/1862429.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bingxuefly/archive/2010/10/27/1862429.html"/><content type="html">&lt;p&gt;VC 编程ANSI环境下读写Unicode文件&lt;/p&gt;&lt;p&gt;没有注意到文件编码的不同会产生这么多的问题，在动手以前查询了很多资料，在本博客中收藏了不少先辈的成果，在这里一并表示致敬！&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 关于ANSI和Unicode编码的原理在这里也不说了，主要讲下如何读写！&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 首先确定你的工程是采用的是什么编码环境，默认是ANSI，不同的字符集读写文件的差别也比较大，我这里只在ANSI环境下做的，下一步在探索在Unicode环境下如何读写！（原先这个没搞懂，读了不少代码发现自己试验都是有误的）。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在ANSI的字符集下，CString等都是单字节版本的，所以一定要注意。而多要读取的Unicode文件却是双字节的，这里就要转换了，当然在ANSI字符集下，还是用二进制的方式打开Unicode文件，自己判断是否是换行，在转化成ANSI编码。而在写Unicode的时候，先将所字符转化成Unicode编码再写入，而且在写文件之前一定要加上Unicode文件的标识。&lt;/p&gt;&lt;p&gt;下面是读&lt;br /&gt;&amp;nbsp;&amp;nbsp; CFile mFile(UnicodefilePath,CFile::modeRead);&lt;br /&gt;&amp;nbsp;&amp;nbsp; byte head[2];&lt;br /&gt;&amp;nbsp;&amp;nbsp; mFile.Read(head,2);&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; if((head[0]==0xff&amp;amp;&amp;amp;head[1]==0xfe)||(head[0]==0xfe&amp;amp;&amp;amp;head[1]==0xff)&amp;nbsp;&amp;nbsp; )&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //AfxMessageBox(_T("File is Unicode!"));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; isUnicode = true;&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;if(isUnicode) mFile.Seek(2,CFile::begin); //0xfffe&lt;br /&gt;wchar_t wch;&lt;br /&gt;wchar_t wstr[300];&lt;/p&gt;&lt;p&gt;CString strvalue ;&lt;br /&gt;hile(mFile.Read((char *)&amp;amp;wch,2)&amp;gt;0)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; if(wch==0x000D)&amp;nbsp; //by line&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //chang to ansi&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int nLen = i;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char *buf = new char[2*nLen]; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WideCharToMultiByte(CP_ACP, 0, wstr, nLen, buf, 2*nLen, NULL, NULL);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; buf[2*nLen-1] = 0;&amp;nbsp;&amp;nbsp; //some assertion failed,这个比较重要，小问题可以折腾人啊&lt;br /&gt;&amp;nbsp;&amp;nbsp; strvalue = buf;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mFile.Seek(2,CFile::current);&amp;nbsp; //跳过行开头符号&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i=0;&lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wstr[i++] = wch;&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;//下面是写&lt;br /&gt;CStdioFile transFile;&lt;br /&gt;transFile.Open(strUnicodeSavepath,CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);&lt;br /&gt;WORD wSignature = 0xFEFF;&lt;br /&gt;transFile.Write(&amp;amp;wSignature, 2);&amp;nbsp; //Unicode的文件符号&lt;br /&gt;&amp;nbsp;&amp;nbsp; CHAR *pszAnsi = new TCHAR[strvalue.GetLength()+1];&lt;br /&gt;&amp;nbsp;&amp;nbsp; _tcscpy(pszAnsi, strvalue); &lt;br /&gt;&amp;nbsp;&amp;nbsp; WCHAR * szwBuffer = new WCHAR[strvalue.GetLength()+1];&lt;br /&gt;&amp;nbsp;&amp;nbsp; MultiByteToWideChar(CP_ACP, 0, pszAnsi, -1, szwBuffer, strvalue.GetLength()+1);&lt;br /&gt;&amp;nbsp;&amp;nbsp; //write to files&lt;br /&gt;&amp;nbsp;&amp;nbsp; transFile.Write(szwBuffer, lstrlenW(szwBuffer) * sizeof(WCHAR));&lt;/p&gt;&lt;p&gt;&lt;br /&gt;当然你可以把你的工程设置成Unicode的字符集，这个时候在Unicode的工程下读取ANSI文件又是一个烦人的事情，讲文件读到CString中的时候，每个单字节的ANSI被转成了双字节，需要自己来处理，后面我再探索探索再来记录。&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;本文来自CSDN博客，转载请标明出处：&lt;a href="http://blog.csdn.net/Augusdi/archive/2009/10/15/4677528.aspx"&gt;http://blog.csdn.net/Augusdi/archive/2009/10/15/4677528.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;============================================================================&lt;/p&gt;&lt;p&gt;将CStdioFile类扩展,读取UNICODE文本文件&lt;/p&gt;&lt;p&gt;最近因为要读取SQL脚本文件，用CStdioFile来读取脚本文件，却在程序调试时读取不了文件。&lt;br /&gt;后来看了一下文本文件格式，竟然是UNICODE格式的，原来在导出ＳＱＬ脚本的时候，选项默认的是UNICODE格式。为了同时支持ANSI和UNICODE两种格式，在Codeproject站点上找到了CStdioFileEx类的代码，但在调试运行过程中发现，在生成UNICODE版本的执行文件时，运行没有错误，但在非UNICODE版本中却出现错误，原来在代码中此部分没有考虑文件读到末尾的情况，经修改，CStdioFileEx类就可以正常使用了，在读取文本文件时，自动识别ANSI和UNICODE两种格式。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;实现头文件如下：&lt;br /&gt;#define nUNICODE_BOM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xFEFF&amp;nbsp; // Unicode "byte order mark" which goes at start of file&lt;br /&gt;#define sNEWLINE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _T("\r\n") // New line characters&lt;br /&gt;#define sDEFAULT_UNICODE_FILLER_CHAR "#"&amp;nbsp;&amp;nbsp; // Filler char used when no conversion from Unicode to local code page is possible&lt;/p&gt;&lt;p&gt;class CStdioFileEx: public CStdioFile&lt;br /&gt;{&lt;br /&gt;public:&lt;br /&gt;&amp;nbsp;CStdioFileEx();&lt;br /&gt;&amp;nbsp;CStdioFileEx( LPCTSTR lpszFileName, UINT nOpenFlags );&lt;/p&gt;&lt;p&gt;&amp;nbsp;virtual BOOL Open( LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError = NULL );&lt;br /&gt;&amp;nbsp;virtual BOOL ReadString(CString&amp;amp; rString);&lt;br /&gt;&amp;nbsp;virtual void WriteString( LPCTSTR lpsz );&lt;br /&gt;&amp;nbsp;bool&amp;nbsp;&amp;nbsp;&amp;nbsp; IsFileUnicodeText() { return m_bIsUnicodeText; } &lt;br /&gt;&amp;nbsp;unsigned long GetCharCount();&lt;/p&gt;&lt;p&gt;&amp;nbsp;// Additional flag to allow Unicode text writing&lt;br /&gt;&amp;nbsp;static const UINT modeWriteUnicode;&lt;/p&gt;&lt;p&gt;&amp;nbsp;// static utility functions&lt;/p&gt;&lt;p&gt;&amp;nbsp;// --------------------------------------------------------------------------------------------&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;// CStdioFileEx::GetUnicodeStringFromMultiByteString()&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;// --------------------------------------------------------------------------------------------&lt;br /&gt;&amp;nbsp;// Returns:&amp;nbsp;&amp;nbsp;&amp;nbsp; bool&lt;br /&gt;&amp;nbsp;// Parameters: char *&amp;nbsp; szMultiByteString&amp;nbsp; (IN) Multi-byte input string&lt;br /&gt;&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wchar_t*&amp;nbsp; szUnicodeString&amp;nbsp; (OUT) Unicode output string&lt;br /&gt;&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; short&amp;nbsp;&amp;nbsp; nUnicodeBufferSize (IN) Size of Unicode output buffer&lt;br /&gt;&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UINT&amp;nbsp;&amp;nbsp; nCodePage&amp;nbsp;&amp;nbsp;&amp;nbsp; (IN) Code page used to perform conversion&lt;br /&gt;&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Default = -1 (Get local code page).&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;// Purpose:&amp;nbsp; Gets a Unicode string from a MultiByte string.&lt;br /&gt;&amp;nbsp;// Notes:&amp;nbsp; None.&lt;br /&gt;&amp;nbsp;// Exceptions: None.&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;static bool&amp;nbsp; GetUnicodeStringFromMultiByteString(char * szMultiByteString,wchar_t* szUnicodeString,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; short nUnicodeBufferSize,UINT nCodePage=-1);&lt;/p&gt;&lt;p&gt;&amp;nbsp;// --------------------------------------------------------------------------------------------&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;// CStdioFileEx::GetMultiByteStringFromUnicodeString()&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;// --------------------------------------------------------------------------------------------&lt;br /&gt;&amp;nbsp;// Returns:&amp;nbsp;&amp;nbsp;&amp;nbsp; BOOL&lt;br /&gt;&amp;nbsp;// Parameters: wchar_t * szUnicodeString&amp;nbsp;&amp;nbsp; (IN) Unicode input string&lt;br /&gt;&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char*&amp;nbsp;&amp;nbsp; szMultiByteString&amp;nbsp;&amp;nbsp; (OUT) Multibyte output string&lt;br /&gt;&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; short&amp;nbsp;&amp;nbsp; nMultiByteBufferSize&amp;nbsp; (IN) Multibyte buffer size&lt;br /&gt;&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UINT&amp;nbsp;&amp;nbsp; nCodePage&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (IN) Code page used to perform conversion&lt;br /&gt;&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Default = -1 (Get local code page).&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;// Purpose:&amp;nbsp; Gets a MultiByte string from a Unicode string.&lt;br /&gt;&amp;nbsp;// Notes:&amp;nbsp; .&lt;br /&gt;&amp;nbsp;// Exceptions: None.&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;static BOOL&amp;nbsp;&amp;nbsp; GetMultiByteStringFromUnicodeString(wchar_t * szUnicodeString,char* szMultiByteString,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; short nMultiByteBufferSize,UINT nCodePage=-1);&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;// --------------------------------------------------------------------------------------------&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;// CStdioFileEx::IsFileUnicode()&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;// --------------------------------------------------------------------------------------------&lt;br /&gt;&amp;nbsp;// Returns:&amp;nbsp;&amp;nbsp;&amp;nbsp; bool&lt;br /&gt;&amp;nbsp;// Parameters: const CString&amp;amp; sFilePath&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;// Purpose:&amp;nbsp; Determines whether a file is Unicode by reading the first character and detecting&lt;br /&gt;&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; whether it's the Unicode byte marker.&lt;br /&gt;&amp;nbsp;// Notes:&amp;nbsp; None.&lt;br /&gt;&amp;nbsp;// Exceptions: None.&lt;br /&gt;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;static bool IsFileUnicode(const CString&amp;amp; sFilePath);&lt;/p&gt;&lt;p&gt;&lt;br /&gt;protected:&lt;br /&gt;&amp;nbsp;UINT ProcessFlags(const CString&amp;amp; sFilePath, UINT&amp;amp; nOpenFlags);&lt;/p&gt;&lt;p&gt;&amp;nbsp;bool&amp;nbsp; m_bIsUnicodeText;&lt;br /&gt;&amp;nbsp;UINT&amp;nbsp; m_nFlags;&lt;br /&gt;};&lt;/p&gt;&lt;p&gt;实现文件如下：&lt;br /&gt;/*static*/ const UINT CStdioFileEx::modeWriteUnicode = 0x20000; // Add this flag to write in Unicode&lt;/p&gt;&lt;p&gt;CStdioFileEx::CStdioFileEx(): CStdioFile()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;m_bIsUnicodeText = false;&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;CStdioFileEx::CStdioFileEx(LPCTSTR lpszFileName,UINT nOpenFlags)&lt;br /&gt;&amp;nbsp;:CStdioFile(lpszFileName, ProcessFlags(lpszFileName, nOpenFlags))&lt;br /&gt;{&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;BOOL CStdioFileEx::Open(LPCTSTR lpszFileName,UINT nOpenFlags,CFileException* pError /*=NULL*/)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;// Process any Unicode stuff&lt;br /&gt;&amp;nbsp;ProcessFlags(lpszFileName, nOpenFlags);&lt;/p&gt;&lt;p&gt;&amp;nbsp;return CStdioFile::Open(lpszFileName, nOpenFlags, pError);&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;BOOL CStdioFileEx::ReadString(CString&amp;amp; rString)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;const int nMAX_LINE_CHARS = 4096;&lt;br /&gt;&amp;nbsp;BOOL&amp;nbsp;&amp;nbsp; bReadData;&lt;br /&gt;&amp;nbsp;LPTSTR&amp;nbsp; lpsz;&lt;br /&gt;&amp;nbsp;int&amp;nbsp;&amp;nbsp; nLen = 0; //, nMultiByteBufferLength = 0, nChars = 0;&lt;br /&gt;&amp;nbsp;CString&amp;nbsp; sTemp;&lt;br /&gt;&amp;nbsp;wchar_t*&amp;nbsp; pszUnicodeString = NULL;&lt;br /&gt;&amp;nbsp;char *&amp;nbsp; pszMultiByteString= NULL;&lt;/p&gt;&lt;p&gt;&amp;nbsp;// If at position 0, discard byte-order mark before reading&lt;br /&gt;&amp;nbsp;if (!m_pStream || (GetPosition() == 0 &amp;amp;&amp;amp; m_bIsUnicodeText))&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; wchar_t cDummy;&lt;br /&gt;//&amp;nbsp; Read(&amp;amp;cDummy, sizeof(_TCHAR));&lt;br /&gt;&amp;nbsp; Read(&amp;amp;cDummy, sizeof(wchar_t));&lt;br /&gt;&amp;nbsp;}&lt;/p&gt;&lt;p&gt;// If compiled for Unicode&lt;br /&gt;#ifdef _UNICODE&lt;br /&gt;&amp;nbsp;// Do standard stuff -- both ANSI and Unicode cases seem to work OK&lt;br /&gt;&amp;nbsp;bReadData = CStdioFile::ReadString(rString);&lt;br /&gt;#else&lt;/p&gt;&lt;p&gt;&amp;nbsp;if (!m_bIsUnicodeText)&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; // Do standard stuff -- read ANSI in ANSI&lt;br /&gt;&amp;nbsp; bReadData = CStdioFile::ReadString(rString);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;else&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; pszUnicodeString = new wchar_t[nMAX_LINE_CHARS]; &lt;br /&gt;&amp;nbsp; pszMultiByteString= new char[nMAX_LINE_CHARS];&amp;nbsp; &lt;/p&gt;&lt;p&gt;&amp;nbsp; // Read as Unicode, convert to ANSI&lt;/p&gt;&lt;p&gt;&amp;nbsp; if(fgetws(pszUnicodeString, nMAX_LINE_CHARS, m_pStream)==NULL)&lt;br /&gt;&amp;nbsp; {&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; bReadData=FALSE;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; else&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; bReadData=TRUE;&lt;br /&gt;&amp;nbsp;&amp;nbsp; if (GetMultiByteStringFromUnicodeString(pszUnicodeString, pszMultiByteString, nMAX_LINE_CHARS))&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rString = (CString)pszMultiByteString;&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; if (pszUnicodeString)&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; delete pszUnicodeString;&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; if (pszMultiByteString)&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; delete pszMultiByteString;&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;#endif&lt;/p&gt;&lt;p&gt;&amp;nbsp;// Then remove end-of-line character if in Unicode text mode&lt;br /&gt;&amp;nbsp;if (bReadData)&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; // Copied from FileTxt.cpp but adapted to Unicode and then adapted for end-of-line being just '\r'. &lt;br /&gt;&amp;nbsp; nLen = rString.GetLength();&lt;br /&gt;&amp;nbsp; if (nLen &amp;gt; 1 &amp;amp;&amp;amp; rString.Mid(nLen-2) == sNEWLINE)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; rString.GetBufferSetLength(nLen-2);&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; else&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; lpsz = rString.GetBuffer(0);&lt;br /&gt;&amp;nbsp;&amp;nbsp; if (nLen != 0 &amp;amp;&amp;amp; (lpsz[nLen-1] == _T('\r') || lpsz[nLen-1] == _T('\n')))&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rString.GetBufferSetLength(nLen-1);&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;return bReadData;&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;// --------------------------------------------------------------------------------------------&lt;br /&gt;//&lt;br /&gt;// CStdioFileEx::WriteString()&lt;br /&gt;//&lt;br /&gt;// --------------------------------------------------------------------------------------------&lt;br /&gt;// Returns:&amp;nbsp;&amp;nbsp;&amp;nbsp; void&lt;br /&gt;// Parameters: LPCTSTR lpsz&lt;br /&gt;//&lt;br /&gt;// Purpose:&amp;nbsp; Writes string to file either in Unicode or multibyte, depending on whether the caller specified the&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CStdioFileEx::modeWriteUnicode flag. Override of base class function.&lt;br /&gt;// Notes:&amp;nbsp; If writing in Unicode we need to:&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a) Write the Byte-order-mark at the beginning of the file&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b) Write all strings in byte-mode&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - If we were compiled in Unicode, we need to convert Unicode to multibyte if &lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; we want to write in multibyte&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - If we were compiled in multi-byte, we need to convert multibyte to Unicode if &lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; we want to write in Unicode.&lt;br /&gt;// Exceptions: None.&lt;br /&gt;//&lt;br /&gt;void CStdioFileEx::WriteString(LPCTSTR lpsz)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;// If writing Unicode and at the start of the file, need to write byte mark&lt;br /&gt;&amp;nbsp;if (m_nFlags &amp;amp; CStdioFileEx::modeWriteUnicode)&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; // If at position 0, write byte-order mark before writing anything else&lt;br /&gt;&amp;nbsp; if (!m_pStream || GetPosition() == 0)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; wchar_t cBOM = (wchar_t)nUNICODE_BOM;&lt;br /&gt;&amp;nbsp;&amp;nbsp; CFile::Write(&amp;amp;cBOM, sizeof(wchar_t));&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;/p&gt;&lt;p&gt;// If compiled in Unicode...&lt;br /&gt;#ifdef _UNICODE&lt;/p&gt;&lt;p&gt;&amp;nbsp;// If writing Unicode, no conversion needed&lt;br /&gt;&amp;nbsp;if (m_nFlags &amp;amp; CStdioFileEx::modeWriteUnicode)&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; // Write in byte mode&lt;br /&gt;&amp;nbsp; CFile::Write(lpsz, lstrlen(lpsz) * sizeof(wchar_t));&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;// Else if we don't want to write Unicode, need to convert&lt;br /&gt;&amp;nbsp;else&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; int&amp;nbsp; nChars = lstrlen(lpsz) + 1;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Why plus 1? Because yes&lt;br /&gt;&amp;nbsp; int&amp;nbsp; nBufferSize = nChars * sizeof(char);&lt;br /&gt;&amp;nbsp; wchar_t* pszUnicodeString = new wchar_t[nChars]; &lt;br /&gt;&amp;nbsp; char * pszMultiByteString= new char[nChars];&amp;nbsp; &lt;/p&gt;&lt;p&gt;&amp;nbsp; // Copy string to Unicode buffer&lt;br /&gt;&amp;nbsp; lstrcpy(pszUnicodeString, lpsz);&lt;/p&gt;&lt;p&gt;&amp;nbsp; // Get multibyte string&lt;br /&gt;&amp;nbsp; if (GetMultiByteStringFromUnicodeString(pszUnicodeString, pszMultiByteString, nBufferSize, GetACP()))&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; // Do standard write&lt;br /&gt;&amp;nbsp;&amp;nbsp; CFile::Write((const void*)pszMultiByteString, lstrlen(lpsz));&lt;br /&gt;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; if (pszUnicodeString &amp;amp;&amp;amp; pszMultiByteString)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; delete [] pszUnicodeString;&lt;br /&gt;&amp;nbsp;&amp;nbsp; delete [] pszMultiByteString;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;// Else if *not* compiled in Unicode&lt;br /&gt;#else&lt;br /&gt;&amp;nbsp;// If writing Unicode, need to convert&lt;br /&gt;&amp;nbsp;if (m_nFlags &amp;amp; CStdioFileEx::modeWriteUnicode)&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; int&amp;nbsp; nChars = lstrlen(lpsz) + 1;&amp;nbsp; // Why plus 1? Because yes&lt;br /&gt;&amp;nbsp; int&amp;nbsp; nBufferSize = nChars * sizeof(wchar_t);&lt;br /&gt;&amp;nbsp; wchar_t* pszUnicodeString = new wchar_t[nChars];&lt;br /&gt;&amp;nbsp; char * pszMultiByteString= new char[nChars]; &lt;/p&gt;&lt;p&gt;&amp;nbsp; // Copy string to multibyte buffer&lt;br /&gt;&amp;nbsp; lstrcpy(pszMultiByteString, lpsz);&lt;/p&gt;&lt;p&gt;&amp;nbsp; if (GetUnicodeStringFromMultiByteString(pszMultiByteString, pszUnicodeString, nBufferSize, GetACP()))&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; // Write in byte mode&lt;br /&gt;&amp;nbsp;&amp;nbsp; CFile::Write(pszUnicodeString, lstrlen(lpsz) * sizeof(wchar_t));&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; else&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; ASSERT(false);&lt;br /&gt;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; if (pszUnicodeString &amp;amp;&amp;amp; pszMultiByteString)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; delete [] pszUnicodeString;&lt;br /&gt;&amp;nbsp;&amp;nbsp; delete [] pszMultiByteString;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;// Else if we don't want to write Unicode, no conversion needed&lt;br /&gt;&amp;nbsp;else&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; // Do standard stuff&lt;br /&gt;&amp;nbsp; CStdioFile::WriteString(lpsz);&lt;br /&gt;&amp;nbsp;}&lt;/p&gt;&lt;p&gt;#endif&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;UINT CStdioFileEx::ProcessFlags(const CString&amp;amp; sFilePath, UINT&amp;amp; nOpenFlags)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;m_bIsUnicodeText = false;&lt;/p&gt;&lt;p&gt;&amp;nbsp;// If we have writeUnicode we must have write or writeRead as well&lt;br /&gt;#ifdef _DEBUG&lt;br /&gt;&amp;nbsp;if (nOpenFlags &amp;amp; CStdioFileEx::modeWriteUnicode)&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; ASSERT(nOpenFlags &amp;amp; CFile::modeWrite || nOpenFlags &amp;amp; CFile::modeReadWrite);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;#endif&lt;/p&gt;&lt;p&gt;&amp;nbsp;// If reading in text mode and not creating...&lt;br /&gt;&amp;nbsp;if (nOpenFlags &amp;amp; CFile::typeText &amp;amp;&amp;amp; !(m_nFlags &amp;amp; CFile::modeCreate) &amp;amp;&amp;amp; !(m_nFlags &amp;amp; CFile::modeWrite ))&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; m_bIsUnicodeText = IsFileUnicode(sFilePath);&lt;/p&gt;&lt;p&gt;&amp;nbsp; // If it's Unicode, switch to binary mode&lt;br /&gt;&amp;nbsp; if (m_bIsUnicodeText)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; nOpenFlags ^= CFile::typeText;&lt;br /&gt;&amp;nbsp;&amp;nbsp; nOpenFlags |= CFile::typeBinary;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;m_nFlags = nOpenFlags;&lt;/p&gt;&lt;p&gt;&amp;nbsp;return nOpenFlags;&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;// --------------------------------------------------------------------------------------------&lt;br /&gt;//&lt;br /&gt;// CStdioFileEx::IsFileUnicode()&lt;br /&gt;//&lt;br /&gt;// --------------------------------------------------------------------------------------------&lt;br /&gt;// Returns:&amp;nbsp;&amp;nbsp;&amp;nbsp; bool&lt;br /&gt;// Parameters: const CString&amp;amp; sFilePath&lt;br /&gt;//&lt;br /&gt;// Purpose:&amp;nbsp; Determines whether a file is Unicode by reading the first character and detecting&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; whether it's the Unicode byte marker.&lt;br /&gt;// Notes:&amp;nbsp; None.&lt;br /&gt;// Exceptions: None.&lt;br /&gt;//&lt;br /&gt;/*static*/ bool CStdioFileEx::IsFileUnicode(const CString&amp;amp; sFilePath)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;CFile&amp;nbsp;&amp;nbsp;&amp;nbsp; file;&lt;br /&gt;&amp;nbsp;bool&amp;nbsp;&amp;nbsp;&amp;nbsp; bIsUnicode = false;&lt;br /&gt;&amp;nbsp;wchar_t&amp;nbsp;&amp;nbsp; cFirstChar;&lt;br /&gt;&amp;nbsp;CFileException exFile;&lt;/p&gt;&lt;p&gt;&amp;nbsp;// Open file in binary mode and read first character&lt;br /&gt;&amp;nbsp;if (file.Open(sFilePath, CFile::typeBinary | CFile::modeRead, &amp;amp;exFile))&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; // If byte is Unicode byte-order marker, let's say it's Unicode&lt;br /&gt;&amp;nbsp; if (file.Read(&amp;amp;cFirstChar, sizeof(wchar_t)) &amp;gt; 0 &amp;amp;&amp;amp; cFirstChar == (wchar_t)nUNICODE_BOM)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; bIsUnicode = true;&lt;br /&gt;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; file.Close();&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;else&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; // Handle error here if you like&lt;br /&gt;&amp;nbsp;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;return bIsUnicode;&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;unsigned long CStdioFileEx::GetCharCount()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;int&amp;nbsp;&amp;nbsp;&amp;nbsp; nCharSize;&lt;br /&gt;&amp;nbsp;unsigned long nByteCount, nCharCount = 0;&lt;/p&gt;&lt;p&gt;&amp;nbsp;if (m_pStream)&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; // Get size of chars in file&lt;br /&gt;&amp;nbsp; nCharSize = m_bIsUnicodeText ? sizeof(wchar_t): sizeof(char);&lt;/p&gt;&lt;p&gt;&amp;nbsp; // If Unicode, remove byte order mark from count&lt;br /&gt;&amp;nbsp; nByteCount = (unsigned long)GetLength();&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; if (m_bIsUnicodeText)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; nByteCount = nByteCount - sizeof(wchar_t);&lt;br /&gt;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; // Calc chars&lt;br /&gt;&amp;nbsp; nCharCount = (nByteCount / nCharSize);&lt;br /&gt;&amp;nbsp;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;return nCharCount;&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;// --------------------------------------------------------------------------------------------&lt;br /&gt;//&lt;br /&gt;// CStdioFileEx::GetUnicodeStringFromMultiByteString()&lt;br /&gt;//&lt;br /&gt;// --------------------------------------------------------------------------------------------&lt;br /&gt;// Returns:&amp;nbsp;&amp;nbsp;&amp;nbsp; bool&lt;br /&gt;// Parameters: char *&amp;nbsp; szMultiByteString&amp;nbsp; (IN) Multi-byte input string&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wchar_t*&amp;nbsp; szUnicodeString&amp;nbsp; (OUT) Unicode outputstring&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; short&amp;nbsp;&amp;nbsp; nUnicodeBufferSize (IN) Size of Unicode output buffer&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UINT&amp;nbsp;&amp;nbsp; nCodePage&amp;nbsp;&amp;nbsp;&amp;nbsp; (IN) Code page used to perform conversion&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Default = -1 (Get local code page).&lt;br /&gt;//&lt;br /&gt;// Purpose:&amp;nbsp; Gets a Unicode string from a MultiByte string.&lt;br /&gt;// Notes:&amp;nbsp; None.&lt;br /&gt;// Exceptions: None.&lt;br /&gt;//&lt;br /&gt;bool CStdioFileEx::GetUnicodeStringFromMultiByteString(char * szMultiByteString, wchar_t* szUnicodeString, short nUnicodeBufferSize, UINT nCodePage)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;bool&amp;nbsp; bOK = true;&lt;br /&gt;&amp;nbsp;int&amp;nbsp; nReturn = 0;&lt;br /&gt;&amp;nbsp;CString sErrorMsg;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;if (szUnicodeString &amp;amp;&amp;amp; szMultiByteString)&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; // If no code page specified, take default for system&lt;br /&gt;&amp;nbsp; if (nCodePage == -1)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; nCodePage = GetACP();&lt;br /&gt;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; try &lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; nReturn = MultiByteToWideChar(nCodePage,MB_PRECOMPOSED,szMultiByteString,-1,szUnicodeString,nUnicodeBufferSize);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; if (nReturn == 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bOK = false;&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; catch(...)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; bOK = false;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;else&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; bOK = false;&lt;br /&gt;&amp;nbsp;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;ASSERT(bOK);&lt;br /&gt;&amp;nbsp;return bOK;&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;// --------------------------------------------------------------------------------------------&lt;br /&gt;//&lt;br /&gt;// CStdioFileEx::GetMultiByteStringFromUnicodeString()&lt;br /&gt;//&lt;br /&gt;// --------------------------------------------------------------------------------------------&lt;br /&gt;// Returns:&amp;nbsp;&amp;nbsp;&amp;nbsp; BOOL&lt;br /&gt;// Parameters: wchar_t * szUnicodeString&amp;nbsp;&amp;nbsp; (IN) Unicode input string&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char*&amp;nbsp;&amp;nbsp; szMultiByteString&amp;nbsp;&amp;nbsp; (OUT) Multibyte output string&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; short&amp;nbsp;&amp;nbsp; nMultiByteBufferSize&amp;nbsp; (IN) Multibyte buffer size&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UINT&amp;nbsp;&amp;nbsp; nCodePage&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (IN) Code page used to perform conversion&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Default = -1 (Get local code page).&lt;br /&gt;//&lt;br /&gt;// Purpose:&amp;nbsp; Gets a MultiByte string from a Unicode string&lt;br /&gt;// Notes:&amp;nbsp; None.&lt;br /&gt;// Exceptions: None.&lt;br /&gt;//&lt;br /&gt;BOOL CStdioFileEx::GetMultiByteStringFromUnicodeString(wchar_t * szUnicodeString, char* szMultiByteString, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; short nMultiByteBufferSize, UINT nCodePage)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;BOOL&amp;nbsp;&amp;nbsp; bUsedDefChar = FALSE;&lt;br /&gt;&amp;nbsp;BOOL&amp;nbsp;&amp;nbsp; bGotIt = FALSE;&lt;/p&gt;&lt;p&gt;&amp;nbsp;if (szUnicodeString &amp;amp;&amp;amp; szMultiByteString) &lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; // If no code page specified, take default for system&lt;br /&gt;&amp;nbsp; if (nCodePage == -1)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; nCodePage = GetACP();&lt;br /&gt;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; try &lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; bGotIt = WideCharToMultiByte(nCodePage, WC_COMPOSITECHECK | WC_SEPCHARS,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; szUnicodeString,-1, szMultiByteString, nMultiByteBufferSize, sDEFAULT_UNICODE_FILLER_CHAR, &amp;amp;bUsedDefChar);&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; catch(...) &lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; TRACE(_T("Controlled exception in WideCharToMultiByte!\n"));&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;} &lt;/p&gt;&lt;p&gt;&amp;nbsp;return bGotIt;&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;本文来自CSDN博客，转载请标明出处：&lt;a href="http://blog.csdn.net/Augusdi/archive/2009/10/15/4677520.aspx"&gt;http://blog.csdn.net/Augusdi/archive/2009/10/15/4677520.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;发&lt;/p&gt;&lt;img src="http://www.cnblogs.com/bingxuefly/aggbug/1862429.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bingxuefly/archive/2010/10/27/1862429.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bingxuefly/archive/2010/06/12/1756889.html</id><title type="text">ICE3.1.1 开发中遇到的问题（四）</title><summary type="text">ICE3.1.1 开发中遇到的问题（四）</summary><published>2010-06-12T03:15:00Z</published><updated>2010-06-12T03:15:00Z</updated><author><name>飞天名猪</name><uri>http://www.cnblogs.com/bingxuefly/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bingxuefly/archive/2010/06/12/1756889.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bingxuefly/archive/2010/06/12/1756889.html"/><content type="html">&lt;p&gt;到目前为止，Ice的最新版本是3.4.1。&lt;/p&gt;&lt;p&gt;不过Ice3.1.1是Zeroc发布的最后一个支持windows2000的官方版本。为了兼容windows2000,我不得不把我的程序分成2个版本，一个用vs2008+ice3.4进行编译。&lt;/p&gt;&lt;p&gt;一个用vc6.0+3.1.1进行编译。&lt;/p&gt;&lt;p&gt;中间遇到不少问题，归纳如下。&lt;/p&gt;&lt;p&gt;1、在使用Ice3.1.1 源码版本时，需要先对Ice3.1.1进行编译。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 编译方法： 用vc6打开源码下面的all.dsw， 打开tools-&amp;gt;option-&amp;gt;Directories.设置Ice的 include目录，lib目录，bin目录&lt;/p&gt;&lt;p&gt;　编译all的时候include目录不能够包含2003 psdk的路径，否则会报很多错误，如果你实在需要使用2003psdk，那么最好先删除psdk的include路径，等编译完成之后再加进来。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2、程序编译&lt;/p&gt;&lt;p&gt;　Ice编译完成之后，对自己写的代码编译，如果自己的代码用到了2003psdk的话，这时候把sdk的include路径包含进来,另外不要忘记stlport的include路径。如果编译出现错误&lt;/p&gt;&lt;p&gt;C:\ICE-3.1.1-THIRDPARTY-VC60\INCLUDE\STLPORT\stl/_threads.h(181) : error C2733: second C linkage of overloaded function 'InterlockedIncrement' not allowed&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C:\ICE-3.1.1-THIRDPARTY-VC60\INCLUDE\STLPORT\stl/_threads.h(181) : see declaration of 'InterlockedIncrement'&lt;/p&gt;&lt;p&gt;则需要打开C:\Ice-3.1.1-ThirdParty-VC60\include\stlport\stl_user_config.h&lt;/p&gt;&lt;p&gt;&amp;nbsp;将这2个开关打开&lt;/p&gt;&lt;p&gt;/* &lt;br /&gt;&amp;nbsp;* You should define this macro if compiling with MFC - STLport &amp;lt;stl/_config.h&amp;gt;&lt;br /&gt;&amp;nbsp;* then include &amp;lt;afx.h&amp;gt; instead of &amp;lt;windows.h&amp;gt; to get synchronisation primitives &lt;br /&gt;&amp;nbsp;*&lt;br /&gt;&amp;nbsp;*/&lt;/p&gt;&lt;p&gt;&amp;nbsp;# define _STLP_USE_MFC 1 //不用mfc的可以不管这个&lt;/p&gt;&lt;p&gt;&lt;br /&gt;// boris : this setting is here as we cannot detect precense of new Platform SDK automatically &lt;br /&gt;// If you are using new PSDK with VC++ 6.0 or lower, please define this to get correct prototypes for InterlockedXXX functions&lt;br /&gt;# define _STLP_NEW_PLATFORM_SDK 1&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;另外还有一些常见错误的编译选项目，比如Project-&amp;gt;Setting-&amp;gt;link里面library modules:Ice.lib IceUtil.lib &lt;/p&gt;&lt;p&gt;Project Options &amp;nbsp;/GR /MDd &lt;/p&gt;&lt;p&gt;Project-&amp;gt;Setting-&amp;gt;C/C++里面的Project Options:_WIN32_WINNT=0X500 &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;另外我还遇到一个问题，debug版本没有任何问题，但是用release版本一运行就出错。&lt;/p&gt;&lt;p&gt;后来发现是我在release版本里面用了/MDd参数进行编译， 在release版本中应该使用/MD &lt;/p&gt;&lt;p&gt;看来当初出现问题的时候没有了解这个参数具体的意思，现在才终于整明白了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/bingxuefly/aggbug/1756889.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bingxuefly/archive/2010/06/12/1756889.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bingxuefly/archive/2010/06/01/1748775.html</id><title type="text">发布9个腾讯微博的邀请码</title><summary type="text">腾讯微博邀请码</summary><published>2010-06-01T00:44:00Z</published><updated>2010-06-01T00:44:00Z</updated><author><name>飞天名猪</name><uri>http://www.cnblogs.com/bingxuefly/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bingxuefly/archive/2010/06/01/1748775.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bingxuefly/archive/2010/06/01/1748775.html"/><content type="html">&lt;p&gt;&lt;a href="http://t.qq.com/invite/1d230b1e485bfa5ff831" target="_blank"&gt;http://t.qq.com/invite/1d230b1e485bfa5ff831&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://t.qq.com/invite/d38baeaa7647a8842cbb" target="_blank"&gt;http://t.qq.com/invite/d38baeaa7647a8842cbb&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://t.qq.com/invite/c9b4669cf8b71506457b" target="_blank"&gt;http://t.qq.com/invite/c9b4669cf8b71506457b&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://t.qq.com/invite/a394e61a6225782215c7" target="_blank"&gt;http://t.qq.com/invite/a394e61a6225782215c7&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://t.qq.com/invite/fc111a583db32234bbf1" target="_blank"&gt;http://t.qq.com/invite/fc111a583db32234bbf1&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://t.qq.com/invite/b30244a56337f166bc97" target="_blank"&gt;http://t.qq.com/invite/b30244a56337f166bc97&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://t.qq.com/invite/dae446215dca571cbd33" target="_blank"&gt;http://t.qq.com/invite/dae446215dca571cbd33&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://t.qq.com/invite/1be85482e2721618ee1f" target="_blank"&gt;http://t.qq.com/invite/1be85482e2721618ee1f&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;我正在用腾讯微博记录我的生活，赶快收听我吧，一起分享精彩生活！&lt;/p&gt;  &lt;img src="http://www.cnblogs.com/bingxuefly/aggbug/1748775.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bingxuefly/archive/2010/06/01/1748775.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bingxuefly/archive/2010/05/28/1746066.html</id><title type="text">[转载]vc6转2008的一些实践经验</title><summary type="text">vc6转2008的一些实践经验</summary><published>2010-05-28T02:48:00Z</published><updated>2010-05-28T02:48:00Z</updated><author><name>飞天名猪</name><uri>http://www.cnblogs.com/bingxuefly/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bingxuefly/archive/2010/05/28/1746066.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bingxuefly/archive/2010/05/28/1746066.html"/><content type="text">vc6转2008的一些实践经验</content></entry><entry><id>http://www.cnblogs.com/bingxuefly/archive/2010/05/19/1739289.html</id><title type="text">IcePatch2+IceGrid部署的解决方案</title><summary type="text">IcePatch2+IceGrid部署的解决方案</summary><published>2010-05-19T07:46:00Z</published><updated>2010-05-19T07:46:00Z</updated><author><name>飞天名猪</name><uri>http://www.cnblogs.com/bingxuefly/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bingxuefly/archive/2010/05/19/1739289.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bingxuefly/archive/2010/05/19/1739289.html"/><content type="text">IcePatch2+IceGrid部署的解决方案</content></entry><entry><id>http://www.cnblogs.com/bingxuefly/archive/2010/05/06/1729092.html</id><title type="text">ICE 开发中遇到的问题（三）</title><summary type="text">今天尝试把我写好的程序拷贝到测试机上去运行，结果又弹出错误窗口提示配置错误，无法运行。差点要崩溃了，以前用VC6.0无非也就是拷贝一个msvc60.dll过来就OK了，换了vs2008编译了一把，除了在我自己机器上跑的很溜以外，找了其他几台机器都跑不起来。</summary><published>2010-05-06T10:16:00Z</published><updated>2010-05-06T10:16:00Z</updated><author><name>飞天名猪</name><uri>http://www.cnblogs.com/bingxuefly/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bingxuefly/archive/2010/05/06/1729092.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bingxuefly/archive/2010/05/06/1729092.html"/><content type="text">今天尝试把我写好的程序拷贝到测试机上去运行，结果又弹出错误窗口提示配置错误，无法运行。差点要崩溃了，以前用VC6.0无非也就是拷贝一个msvc60.dll过来就OK了，换了vs2008编译了一把，除了在我自己机器上跑的很溜以外，找了其他几台机器都跑不起来。</content></entry><entry><id>http://www.cnblogs.com/bingxuefly/archive/2010/04/07/1706601.html</id><title type="text">Ice开发中遇到的问题（二）</title><summary type="text">Ice开发中遇到的问题（二）</summary><published>2010-04-07T10:05:00Z</published><updated>2010-04-07T10:05:00Z</updated><author><name>飞天名猪</name><uri>http://www.cnblogs.com/bingxuefly/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bingxuefly/archive/2010/04/07/1706601.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bingxuefly/archive/2010/04/07/1706601.html"/><content type="text">Ice开发中遇到的问题（二）</content></entry><entry><id>http://www.cnblogs.com/bingxuefly/archive/2010/03/22/ICE.html</id><title type="text">ICE开发中遇到的问题 （一）</title><summary type="text">ICE开发中遇到的问题 （一）</summary><published>2010-03-22T06:10:00Z</published><updated>2010-03-22T06:10:00Z</updated><author><name>飞天名猪</name><uri>http://www.cnblogs.com/bingxuefly/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bingxuefly/archive/2010/03/22/ICE.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bingxuefly/archive/2010/03/22/ICE.html"/><content type="text">ICE开发中遇到的问题 （一）</content></entry><entry><id>http://www.cnblogs.com/bingxuefly/archive/2010/03/19/1689736.html</id><title type="text">使用ICE遇到的编译问题</title><summary type="text">使用ICE遇到的编译问题</summary><published>2010-03-19T04:59:00Z</published><updated>2010-03-19T04:59:00Z</updated><author><name>飞天名猪</name><uri>http://www.cnblogs.com/bingxuefly/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bingxuefly/archive/2010/03/19/1689736.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bingxuefly/archive/2010/03/19/1689736.html"/><content type="text">使用ICE遇到的编译问题</content></entry></feed>
