资源简介
用一个文件虚拟为磁盘,在其上模拟多级目录的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
相关资源
- Hadoop权威指南第四版_中文版本_pdf高清
- SEO程序,收录快,排名快,蜘蛛多
- EPLAN 2.6顿卡补丁version.dll复制到安装目
- IEEE期刊目录
- 《Kubernetes进阶实战》高清影印带书签
- 扫描网站目录的工具 很好用的一个工
- 获取Ftp目录树并绑定到treeview
- markdown生成目录/侧边栏目录
- GCC LD中文手册(完整版,附目录)
- 5000本epub书籍有目录.txt
- 自动生成文件夹目录
-
查看 编辑 xm
l文件的 小工具 - 完整版项目文档管理目录结构
- windows上删除当前目录下指定的文件
- 多用户多级目录文件系统
- UG NX中的一条曲线的点集进行批量导出
- WindowsServer2012系统配置指南_完整版P
- vim编辑器的插件配置(.vim目录
- proftpd虚拟用户挂载多个目录
- 多用户多目录文件系统设计与实现
- 高清PDF带目录《加密与解密第4版》段
- 振南电子znFAT文件系统,读写SD卡程序
- MSP430 单片机读写SD卡程序带fat文件系
- 《ARCore之路-Untiy开发从入门到实践》
- wwwscan不错的网站目录扫描
- 模拟实现单级目录、单级索引的索引
- Windchill开发之业务对象、目录结构、
- 2021年SCD名单.docx
- 医疗器械分类目录2018版.docx
- 2018年EI收录中文期刊目录
评论
共有 条评论