文件管理
hello 我是橘子,这个是我最满意的一个吧,因为真正实现了在内存中建立文件夹和删除文件夹,也是花费时间最长的一个文件
文件管理
●基本要求:利用磁盘文件实现操作系统的文件管理功能,主要包括目录结构的管理、外存空间的分配与释放以及空闲空间管理三部分。
●参考学时:9学时
●实验提示:
1、通过初始化操作建立一个模拟外存空间的虚拟磁盘文件,在该文件中保存目录和文件内容。创建该文件时应创建初始的根目录内容、文件分配表。根目录实为一特殊文件,其开始内容为空,大小为一个块。
2、文件目录项(可以采用FCB格式)应包括类型(目录 or文件)、创建日期、大小、第一个磁盘块块号。
3、显示命令提示符“$”,并根据输入命令完成相应的文件操作:
●MD(创建子目录):创建目录文件,并在父目录文件中增加目录项。
●CD(切换工作目录):根据当前目录切换到指定目录。
●RD(删除子目录):搜索所要删除的目录是否为空目录,若是则删除。
●MK(创建空文件):创建指定大小的文件(如输入命令 “mk test 2000”,表示创建大小为2000字节的test文件),并在父目录中添加文件名称;还应对FAT表进行适当修改。
●DEL(删除文件):如果所要删除的文件存在,则删除,同时修改父目录内容;还应对FAT表进行适当修改。
●DIR:列出当前目录的所有目录项。
●FORMAT:根据进一步的虚拟磁盘文件名和块个数信息创建出虚拟磁盘文件。
●*TREE:根据磁盘文件和目录按着树形结构加以显示。
4、实现提要
●首先应确定采用FAT16表,块大小固定为1024Byte;
●定义目录项结构:
struct FCB{ //文件或目录控制块
char name[8]; //文件名最长不超过8个字符,这样整个FCB大小正好为32Byte
int size; //大小
int first_block; //第一块块号
char type; //类型,1为文件,2为目录,0为已删除目录项
char datetime[15]; //日期时间,格式为yyyymmdd hhmmss
};
●定义两个宏:EMPTY_BLOCK和LAST_BLOCK,用于表示FAT表中的特殊内容
#define EMPTY_BLOCK 0x0000
#define LAST_BLOCK 0xFFFF
●评分标准(满分15分):
要求必须完成以下几个方面的内容(10-12分):
能够在磁盘文件基础上模拟外存分配与回收流程;
●支持dir、md、cd、rd命令。
也可实现如下扩充要求(3-5分):
●可较方便查看位示图、索引节点、目录树关系
●能够实现创建文件的mknod命令以及删除文件的del命令,可对所创建的文件内容进行简单的编辑。
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<fstream>
#include<string>
#include<time.h>
#include<direct.h>
#include<windows.h>
using namespace std;
struct FCB
{
char name[10];//文件名最长不超过8个字符,这样整个FCB大小正好为32Byte
int size1;//大小
int fat[64];//块号
double bit;
int first;//fat的角标
int first_block;//第一块块号
int type;//类型,1为文件,2为目录,0为已删除目录项
char time[20]; //日期时间,格式为yyyymmdd hhmmss
char path[100];
char parent[100];
};
struct FCB fcb[50];
int f