• 大小: 6KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-29
  • 语言: 其他
  • 标签: FAT文件  目录  

资源简介

用一个文件虚拟为磁盘,在其上模拟多级目录的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


评论

共有 条评论