xcopy32完整实现

2008-02-23 05:40:26来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

原帖及讨论: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

附件下载:

点击下载该文档

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




标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: ASP.NET效率陷阱之——Attributes

下一篇: C语言高效编程的四大绝招[2]

热门词条
热门标签