资源简介
用一个文件虚拟为磁盘,在其上模拟多级目录的FAT文件系统。并提供相应的用户操作界面。可以开发为控制台应用程序或windows窗体程序。
功能:
实现基本的目录和文件的操作。比如,目录的切换,显示当前路径,显示目录内容,目录和文件的建立、复制、删除、重命名,文件内容显示,文件导入(从真实的文件系统中导入一个文件存放到该模拟文件系统中),文件的导出(将模拟文件系统中的一个文件导出到真实的文件系统中)。

代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define MAX_FILE_NAME 16 // 文件名最大长度
#define INODE_NUM 100 // 设备目录区中可存放的I节点的个数
#define BLOCK_NUM 1024 // 文件区盘块数
#define BLOCK_SIZE 512 // 文件盘块大小
#define MAX_COMMAND_NUM 10 // 用户输入的命令中参数最多个数
#define MAX_COMMAND_LENGTH 20 // 用户输入命令的每个参数的最大长度
//数据结构定义
struct VolumeInfo
{
long iNodeTableAddress; //设备目录表地址
long fatTableAddress; //fat表地址
long dataAreaAddress; //数据表地址
long totalSpace; //总空间
long usedBlock; //占用块数
long leftSpace; //剩余空间
};
struct INode
{
long index; //索引号
int type; //文件类型,0为目录,1为文件,-1是空闲
long address; //fat表区
long size; //文件大小
};
struct Fat
{
long nextAddress; //块链中下一块是否存在,为-2表空闲,否则表占用
};
struct FileIndex
{
char name[MAX_FILE_NAME]; //文件名
long iNodeIndex; //索引号
};
//全局变量
int fd; //模拟文件系统的文件的文件描述符
VolumeInfo volumeInfo; //盘卷总信息
char command[MAX_COMMAND_NUM][MAX_COMMAND_LENGTH]; //存放用户输入的命令的字符串数组
int commandNum; //用于存放用户输入的命令的参数个数
INode currentINode; //用户当前目录的描述信息
char name[MAX_FILE_NAME][MAX_FILE_NAME]; //当前路径
//显示命令提示符,并接受用户输入的命令
void getCommand()
{
//处理用户输入的命令,放入command二维数组中
char commandChar;
int commandLength; //命令长度
commandNum = 0; //命令个数
commandLength = 0;
while(1)
{
cout << “Input command:“; //输出命令提示符
cin >> commandChar;
while(commandChar != ‘\n‘) //若输入不为换行
{
if(commandChar == ‘ ‘) //若输入空格
{
if(commandLength != 0) //若命令长度不为0
{
command[commandNum][commandLength] = ‘\0‘; //参数输入结束
commandNum++; //进入下一个参数
commandLength = 0; //置下一个参数长度为0
}
commandChar = getchar();
continue; //进入下一次循环
}
else //若输入不为空格
{
command[commandNum][commandLength] = commandChar; //将字符放入二维数组
commandLength++;
}
commandChar = getchar();
}
command[commandNum][commandLength] = ‘\0‘; //最后一个参数输入结束
if(commandLength > 0 ) //如果长度大于0
commandNum++; //进入新的存储字符区域
if(commandNum != 0) //如果命令参数不为0
break; //退出循环
}
}
//清屏
void vfs_clear()
{
system(“cls“);
}
//根据INode索引写入INode
void setINode(INode* pINodelong index)
{
pINode->index = index;
lseek(fdvolumeInfo.iNodeTableAddress + index * sizeof(INode)SEEK_SET);
write(fdpINodesizeof(INode));
}
//格式化
void vfs_format()
{
int i = 0;
name[10][MAX_FILE_NAME] = 0;
lseek(fd0SEEK_SET); //移动文件读写指针到虚拟文件系统的开始处
//初始化盘卷总信息
volumeInfo.iNodeTableAddress = sizeof(VolumeInfo);
volumeInfo.fatTableAddress = volumeI
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 27108 2009-12-11 11:23 fat1.cpp
----------- --------- ---------- ----- ----
27108 1
相关资源
- [免费]MFC制作目录树
- 计算机专业基础综合知识
- 清华通信重要国际学术会议目录
- 基于MFC的文件目录树的对话框实现代
- 易语言迅雷补丁源码
- 大话处理器:处理器基础知识读本高
- CISSP官方学习指南(第7版)中文版带
- 易语言树型框加载目录源码
- 电力电子技术(第4版)_王兆安_带目
- Node.js-瓦雀可以帮你把本地的文档ma
- 计算机组成与设计(硬件软件接口)
- 费曼物理学讲义(中英文版-PDF书签带
- 统计思维:程序员数学之概率统计-带
- 计算机考研 机试指南-王道论坛_高清
- 京东基础架构建设之路 全彩, 带目
- 政务信息资源目录体系标准
- 挑战程序设计竞赛2 算法和数据结构
- 硬黑客 智能硬件生死之战 陈根编著
- 编码 隐匿在计算机软硬件背后的语言
- 统计用产品分类目录2012
- 《互联网金融-大数据时代的金融革命
- 免费的2014ftp暴力破解扫描工具可自动
- RocketMQ技术内幕高清带书签目录
- Presto技术内幕-高清-完整目录-2016年
- Windows Server 2012活动目录管理实践
- 计算广告含有目录 刘鹏版
- 华为企业网全系列数通产品目录
- Windows Server 2012 R2 Active Directory配置指
- 《哥德尔、艾舍尔、巴赫——集异璧
- [概率论与数理统计]陈希孺带目录
评论
共有 条评论