虚拟磁盘项目

虚拟磁盘系统
本项目用C++模拟了DOS下的文件操作功能,在内存中构建了一个虚拟磁盘系统,支持创建、删除目录,拷贝、删除文件等操作。程序遵循面向对象原则,未使用STL库,自行实现了字符串类。

 

使用c++编写一个console程序,可以模拟dos下文件操作的过程。在windows下,使用"开始"->"运行"->"cmd" 时,会弹出console窗口。在命令行下,输入dir, copy 等命令,可以完成磁盘文件操作功能。此项目就是编制一个程序,模拟这种功能,并且在内存中建立一个真正的内存磁盘,可以任意的创建、删除目录,拷贝、删除文件,列出目录、文件,转移当前所在路径等功能。

 

1使用面向对象的c++。 使用3种或以上设计模式进行编写。

2运行期间或者程序结束时,不得出现异常退出。用户可以自行使用"exit"退出。

3不得有内存泄露

4不能使用stl(字符串或其他数据结构自己实现),实现一个自己的MyString

5使用WIN32 SDK或者C RUNTIME LIB都可

6 用户输入命令的必要容错处理和提示

 

1,程序运行在console窗口

2,初始提示符在C:/ ,不用创建另外的磁盘,不增加其他磁盘符

3,可以使用"mkdir" 创建目录。

目录名称小于256字符。

可以带空格。

目录命名与WINDOWS目录命名规则一致。

大小写不敏感。

目录深度任意。其

他容错处理参考dosmkdir命令。

4,可以使用"cd"命令在不同目录下转移。

其他容错处理参考doscd命令。

5,可以使用"copy"命令把真正硬件磁盘上的任意目录下的文件内容

(把文件按byte拷贝到内存中。不能只记录指针或者文件名)

拷贝到虚拟磁盘任意指定目录中。

命令格式按照dos copy的格式。

不用处理带/可选参数。

只需要用户输入被复制文件路径和复制文件路径。

支持通配符。

其他容错处理参考doscopy命令。

6,可以使用"del"删除任意虚拟磁盘中已经存在的一个文件。

其他容错处理参考dosdel命令。支持通配符。

7,可以使用"rmdir"删除一个目录。

可以带有 /S 命令参数。当有/s 命令时,递归删除目录下所有目录和文件。

其他容错处理参考dosrmdir命令。

8,可以使用"dir"命令。

输出结果需要和dos下的dir一致。

可以使用 dir /ad 命令 。

可以使用dir /s 命令。

其他容错处理参考dosdir命令。

9,使用compare 磁盘文件目录文件 虚拟磁盘文件 比较磁盘上和虚拟磁盘上2个文件的内容。

如果完全一致,输出“内容比较一致”,如果不同,输出不同内容的第一处位置,和不同内容的前16个字节。

二进制文件输出16进制数值。文本文件输出字符串。

 

 

解决方案如下

<disk.h>

 

 

<disk.cpp>

 

<main.cpp>

 

 

代码中有一些功能 读者 可以根据自己的需要更改FindPath()函数 来实现功能转换,写的不好 大家多多见谅

2010-12-16

 

 

 

Delphi编的虚拟硬盘文件浏览程序,这段代码只实现了很小的功能,对分区格式有限制,只能读取不能入,只能读取C盘根目录下的文件.等等.代码里符带一份学习笔记,是Fat分区格式的,不是太详细,到数据恢复网可以找到详细的资料.   使用Virtual PC的时候,刚开始时对于VPC和宿主之间的文件传输却一直没有整明白,所以要从宿主计算机中传输文件到VPC中只能靠WinIso制作成iso文件再用VPC的光驱来读取,这样做很麻烦,而且只是一面传输,所以就看一下VPC的虚拟硬盘,一看之下和记忆中的硬盘格式差不多,我只记得有个"55 AA",不巧的是在这里也找到了这个数据.所以就想做一个读取虚拟磁盘的软件.    于是去网上找了一些看了下:    首先是硬盘的主引导扇区,固定值:0磁面0磁道1扇区.大小512字节,记得前几天看过<>--一本不错的书,它那上面的第一个程序便是了一个引导程序.它便是了程序所需要的功能后将其它地方填0以达到512字节.当然最后两个字节一定是"55 AA",只有这个值才是有效的.    但是,上面所提那个引导程序显然是不合理的(书中只是一个软件盘引导可以不涉及到分区信息).因为真正的引导程序只能是占用此扇区的前446个字节,而后面直到最后"55 AA"之前的64个字节,是用来记录分区信息的DPT(Disk PartitionTable).但是作为在虚拟机上或软盘上的演示似乎也无妨(硬盘肯定不行,会破坏整个系统分区).    由于只是为了VPC与宿主计算机交换数据,所以我决定只读取第一分区就可以了.首先准备一个新VPC虚拟硬盘,用VPC建一个最小的3M硬盘(这一点是Virtual PC比VMWare强的),分区(全做为C盘),格式化,由于硬盘很小,所以只能格式化成Fat12,这里只学习了Fat12和Fat16的分区格式,然后用UltraEdit打开:    果然,510字节后便是"55 AA"即行标"0x01f0h"最后两字节,再看一下前面行标"0x1B0h"最后两字节是"80 01"80便是表示此分区为活动分区,即从此开始为第一个分区的信息.前面正好446字节.    每一个分区由十六个字节来描述.第一字节只能为"80"或"00",我们先不关心这些字节,只关心最后四个字节--分区所占扇区数.和最后第八字节开始的四个字节--相对扇区数,即此分区之前还有多少扇区.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值