手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>C/C++>列表

xcopy32完整实现

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

原帖及讨论:http://bbs.bc-cn.net/dispbbs.asp?boardid=56&id=164983

*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 http://www.bc-cn.net
*/ 作者: yuki
*/ 时间: 2007-8-23 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------

作者声明:
1、这是个完整的原创研发实例,目的在于揭示一个完整应用的研发过程,研发原理完全是作者长期研发过程中所总结的,假如有错误,或和正规研发模式有出入,请指正,作者在这里感谢各位参和批评指正的朋友。
2、这是个完全开源软件,作者在这里不和大家讨论该软件是否有开源价值,只是想让大家更积极的参和讨论软件的研发,连同对该软件的bug修正。

软件介绍:
以前使用过dos的朋友都知道,xcopy是一款当年流行的文档拷贝工具,不但能够进行单文档拷贝,更多的使用作目录树的拷贝,刚开始学习编程时,对于这样的软件十分好奇,总是思考着如何去实现,但经过好几年的程式学习仍然没有方法编写,直到现在就读于电脑专业后,才发现,这样一款小型的软件牵扯到很多知识背景,由于现在dos的命令行环境已被逐渐淡忘,许多诸如xcopy的功能不复存在,今年暑假我就决心去实现当年的经典,在10天克服很多艰难困苦走过来的时候,觉得那份甜美是没有任何东西能够取代的。

知识背景:
C/C 基础,Windows编程基础,熟悉数据结构,操作系统原理

使用到的Windows API函数:
CreateFileA, FindFirstFileA, FindNextFileA, ReadFile, WriteFile, CreateDirectoryA, DeleteFileA, InitializeCriticalSection, EnterCriticalSection, LeaveCriticalSection, CreateThread, CloseHandle, FindClose, RemoveDirectoryA, ExitThread
这些函数我不多作介绍,请自行查找msdn,自己动手才有收获么,我也是这么过来的。

使用到的主要数据结构:
树(一般树),栈(使用链表的动态栈),链表(单向、双向),HASH表,串

使用到的操作系统原理:
临界区资源的互斥访问

研发概念:
研发一个完整的、实用的项目到底应该怎么做,许多人都是无从下手,其实我也有这个感觉,一旦项目庞大了,要考虑的问题也就多了,自然而然产生的困难也就多了。要是觉得一块大的比萨饼没法吃,为什么不把他分的小一点呢?这样就引入了一个项目分块,但是分块前要明确软件的最终目的。
1、软件目的:
xcopy32要实现的是个多线程的文档或目录树的复制操作。
2、软件的功能确定:
复制文档及目录树是主要功能,附带线程的调整,数据校验,转移操作(如同move命令)
3、确定提供软件的工具:
a. 指正在软件中使用频繁,频繁的分配和回收会造成内存碎片的产生,为了减少碎片采用段(块)页式内存管理 --> (malloc.h, malloc.cpp)
b. 多线程文档复制时必然需要将文档分块,所以要引入线程创建和分块这个概念 --> (thread.h, thread.cpp)
c. 由于该软件是基于命令行的操作,便要引入命令行分析概念 --> (param.h, param.cpp)
d. 文档和目录树的搜索,作为软件的核心 --> (xcopy32.h, xcopy32.cpp)
e. 由于目录树的搜索需要使用树这一数据结构,而树的遍历主要使用层次遍历,这样就要引入栈这个概念 --> (stack.h, stack.cpp)
f. 对于空指针的判断和操作进行宏定义封装 --> (null.h)
g. 对于数据类型的重定义和全局常量宏 --> (def.h)
h. 为了支持软件的发展和测试,引入版本管理 --> (version.h)
到这里,一个项目就规划好了,接着就是编码了。

编码:
心急喝不了热粥,模块要一个一个做,做完一个功能就测试一个功能,当您全部做完再测试,错误的连锁反应会让您打退堂鼓,每成功调试一个功能,修正一个错误,都让您在前进的路上留下了深深的脚印,每每会头,都是对自己一种继续前进的鼓励和支柱。
好了,至于如何编写程式,我在这里不多介绍,附件中有记载部分的算法原理(本人认为比较难理解的),代码加了点注释,代码阅读顺序能够参看研发日志进行阅读。

编译环境:
Visual Studio 2005 .net team edition 打开xcopy32\src\xcopy32.sln即可编译

软件参数说明:
-s 来源路径
-d 目的路径
-p 复制子文档夹及其任何文档
-o 总是覆盖(没有这个选项则碰到已存在文档将给出提示)
-m 转移(相当于move,将来源全部转移到目的)
-tn 每个文档用n个线程复制,线程约束1~5
-v 数据校核

软件使用方法:
例xcopy32 -sC:\program files\common files\*.dll -dd:\abcd\efg -p -t5 -v -o
例xcopy32 -sc:\go.bat -dd:\ -t5 -m -o

附件下载:

点击下载该文档

希望广大网友踊跃发言,因为上述文章也是本人经验之谈,批评和指正错误,谢谢。




文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

热点关注
IDC资讯 虚拟主机 域名注册 托管租用 vps主机 智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 价格总览 | 资讯中心 | 友情链接 | 网站地图 | 招贤纳士 | RSS