简单文件系统的实现实验报告

合集下载

文件管理系统实验报告

文件管理系统实验报告

一、实验目的本次实验旨在通过设计和实现一个简单的文件管理系统,加深对文件管理原理的理解,掌握文件系统的基本操作,包括文件的创建、删除、修改、查询等,并了解文件系统的目录结构和管理机制。

二、实验环境1. 操作系统:Windows 102. 开发工具:Visual Studio 20193. 编程语言:C++4. 实验时间:2023年10月25日三、实验内容1. 文件系统的目录结构设计2. 文件的基本操作实现3. 文件系统的存储管理4. 文件系统的安全机制四、实验步骤1. 目录结构设计根据文件系统的需求,设计以下目录结构:```根目录│├── 文件夹A│ ├── 文件1.txt│ └── 文件2.txt│├── 文件夹B│ └── 文件3.txt│└── 文件夹C```2. 文件的基本操作实现(1)文件创建```cppvoid CreateFile(const std::string& filePath, const std::string& content) {// 检查文件是否存在if (CheckFileExist(filePath)) {std::cout << "文件已存在!" << std::endl;return;}// 创建文件std::ofstream file(filePath);if (file.is_open()) {file << content;file.close();std::cout << "文件创建成功!" << std::endl;} else {std::cout << "文件创建失败!" << std::endl;}}```(2)文件删除```cppvoid DeleteFile(const std::string& filePath) {// 检查文件是否存在if (!CheckFileExist(filePath)) {std::cout << "文件不存在!" << std::endl;return;}// 删除文件if (remove(filePath) == 0) {std::cout << "文件删除成功!" << std::endl;} else {std::cout << "文件删除失败!" << std::endl;}}```(3)文件修改```cppvoid ModifyFile(const std::string& filePath, const std::string& newContent) {// 检查文件是否存在if (!CheckFileExist(filePath)) {std::cout << "文件不存在!" << std::endl; return;}// 修改文件内容std::ofstream file(filePath, std::ios::trunc); if (file.is_open()) {file << newContent;file.close();std::cout << "文件修改成功!" << std::endl; } else {std::cout << "文件修改失败!" << std::endl; }}```(4)文件查询```cppvoid QueryFile(const std::string& filePath) {// 检查文件是否存在if (!CheckFileExist(filePath)) {std::cout << "文件不存在!" << std::endl; return;}// 读取文件内容std::ifstream file(filePath);if (file.is_open()) {std::string content((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());std::cout << "文件内容:" << content << std::endl;file.close();} else {std::cout << "文件读取失败!" << std::endl;}}```3. 文件系统的存储管理文件系统采用磁盘文件作为存储介质,通过文件操作实现对文件的读写。

文件管理的实验报告(3篇)

文件管理的实验报告(3篇)

第1篇一、实验目的1. 理解文件管理的概念和重要性。

2. 掌握文件系统的基本结构和工作原理。

3. 学会使用文件管理工具进行文件操作。

4. 了解文件系统优化和故障处理方法。

二、实验环境1. 操作系统:Windows 102. 文件管理工具:Windows资源管理器3. 实验数据:实验过程中所创建和操作的文件、文件夹三、实验内容1. 文件系统的基本概念(1)文件:文件是存储在存储设备上的数据集合,具有特定的文件名和文件属性。

(2)文件夹:文件夹是用于组织和管理文件的容器,可以包含多个文件和子文件夹。

(3)文件系统:文件系统是操作系统用于管理存储设备上的文件和文件夹的机制。

2. 文件系统的基本操作(1)创建文件:在资源管理器中,右键单击目标位置,选择“新建”->“文本文档”或“新建”->“文件夹”等操作创建文件或文件夹。

(2)重命名文件:选中文件或文件夹,右键单击,选择“重命名”进行修改。

(3)移动文件:选中文件或文件夹,右键单击,选择“剪切”或“复制”,然后在目标位置粘贴。

(4)复制文件:选中文件或文件夹,右键单击,选择“复制”,然后在目标位置粘贴。

(5)删除文件:选中文件或文件夹,右键单击,选择“删除”。

(6)恢复文件:在回收站中,右键单击已删除的文件或文件夹,选择“还原”。

3. 文件系统的目录结构(1)单级目录结构:所有文件和文件夹都存储在一个根目录下,易于管理,但存在文件名冲突、文件查找效率低等问题。

(2)多级目录结构:将文件和文件夹组织成树状结构,便于管理和查找,解决了单级目录结构的缺点。

4. 文件系统优化(1)定期清理磁盘碎片:磁盘碎片会影响文件读写速度,可以通过磁盘清理工具或系统自带的磁盘碎片整理程序进行优化。

(2)合理分配磁盘空间:根据实际需求,将磁盘空间分配给不同分区,提高磁盘利用率。

(3)限制文件权限:设置文件和文件夹的访问权限,保护数据安全。

5. 文件系统故障处理(1)磁盘损坏:使用数据恢复软件尝试恢复数据,或更换磁盘。

文件系统设计实验报告

文件系统设计实验报告

文件系统设计实验报告文件系统设计实验报告一、引言在计算机科学领域,文件系统是操作系统中的一个重要组成部分,用于管理和组织计算机存储设备上的文件和目录。

一个高效稳定的文件系统对于计算机系统的正常运行至关重要。

本实验旨在设计一个简单但功能完善的文件系统,并通过实验验证其性能和可靠性。

二、实验背景文件系统是计算机操作系统的核心组成部分之一,它负责管理计算机存储设备上的文件和目录。

一个好的文件系统应该具备以下特点:高效的文件存取速度、可靠的数据完整性、良好的扩展性和灵活性。

三、实验目标本实验的主要目标是设计一个简单但功能完善的文件系统,并通过实验验证其性能和可靠性。

具体而言,我们将实现以下功能:1. 文件的创建、读取、写入和删除。

2. 目录的创建、删除和遍历。

3. 文件和目录的权限管理。

4. 文件系统的容量管理。

5. 文件系统的备份和恢复。

四、实验设计与实现1. 文件和目录的创建、读取、写入和删除在文件系统中,文件和目录都是通过数据块来存储的。

我们可以使用链表或树的数据结构来组织文件和目录之间的关系。

为了提高文件的读取和写入效率,可以采用缓存机制,将最近访问的文件块缓存在内存中。

2. 目录的创建、删除和遍历目录是文件系统中用于组织和管理文件的一种特殊文件。

为了实现目录的创建、删除和遍历功能,我们可以使用树的数据结构来表示目录结构,并通过递归算法来实现目录的遍历。

3. 文件和目录的权限管理为了保护文件和目录的安全,我们可以为每个文件和目录设置权限。

权限可以分为读、写和执行三种类型。

通过权限管理,可以限制用户对文件和目录的操作,提高文件系统的安全性。

4. 文件系统的容量管理文件系统的容量管理是指对文件和目录所占用的存储空间进行管理。

为了有效利用存储空间,我们可以使用位图或链表等数据结构来管理存储空间的分配和释放。

5. 文件系统的备份和恢复为了保证文件系统的可靠性,我们可以定期对文件系统进行备份。

备份可以通过复制文件和目录的数据块来实现。

文件系统 实验报告

文件系统 实验报告

文件系统实验报告引言文件系统是操作系统中的一部分,用于管理计算机中的文件和目录。

它提供了数据的存储、访问、组织和管理功能,是操作系统的基础之一。

本实验通过实现一个简单的文件系统来深入理解文件系统的原理和实现方式。

实验目的1. 了解文件系统的基本概念和原理;2. 学习文件系统的设计和实现方法;3. 掌握文件系统的基本操作。

实验环境本次实验使用的是Ubuntu 20.04操作系统。

实验步骤1. 文件系统的设计在开始实现文件系统之前,我们首先需要设计文件系统的结构和功能。

1.1 文件系统的结构文件系统通常由三个主要部分组成:文件控制块、目录和数据块。

文件控制块用于存储文件的属性和元数据,目录用于组织文件和子目录,数据块用于存储文件的实际内容。

1.2 文件系统的功能文件系统需要提供以下功能:- 文件的创建、读取、修改和删除;- 目录的创建、读取、修改和删除;- 文件和目录的查找;- 文件的权限管理。

2. 文件系统的实现2.1 文件系统的初始化在实现文件系统之前,我们首先需要初始化文件系统。

包括创建超级块、位图和根目录,并将它们写入磁盘。

2.2 文件和目录的操作在文件系统中,我们需要实现文件和目录的基本操作,包括创建文件、创建目录、读取文件内容、修改文件内容和删除文件。

2.3 文件系统的其他操作除了基本的文件和目录操作之外,文件系统还需要实现其他一些功能,如文件查找、权限管理等。

3. 文件系统的测试在完成文件系统的实现后,我们需要对其进行测试,以验证其功能是否正常。

3.1 创建文件和目录我们首先创建一些文件和目录,检查它们是否被正确地写入磁盘,并且能够被正确地读取。

3.2 读取和修改文件我们随机选择一些文件,读取它们的内容,并对其内容进行修改。

修改后,我们再次读取文件,确保修改成功。

3.3 删除文件和目录我们尝试删除一些文件和目录,并检查它们是否被成功地删除。

4. 结果与讨论经过测试,我们发现我们实现的文件系统功能正常,能够按照我们的预期进行文件和目录的创建、读取、修改和删除等操作。

简单文件系统模拟实验

简单文件系统模拟实验

简单文件系统模拟实验实验目的通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统功能和实现过程的理解。

实验内容▪在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个简单的单用户文件系统。

在退出这个简单文件系统时,应将该虚拟文件系统保存到磁盘上,以便下次可以再将它恢复到内存的虚拟磁盘上。

▪文件存储空间的分配可以采用显式链接分配或其它方法。

▪空闲空间的管理可以选择位示图或其它方法。

如果采用位示图来管理文件存储空间,并采用显式链接分配方式,可以将位示图合并到FAT中。

▪文件目录结构采用多级目录结构。

为简单起见,可以不使用索引结点,其中的每个目录项包含文件名、物理地址、文件长度等信息,还可以通过目录项实现对文件读和写的保护。

▪要求提供以下有关的文件操作:✧Format:对文件存储器进行格式化,即按照文件系统的结构对虚拟磁盘空间进行布局,并在其上创建根目录以及用于管理文件存储空间等的数据结构。

✧Mkdir:用于创建子目录。

✧Rmdir:用于删除子目录。

✧Ls:用于显示目录。

✧Cd:用于更改当前目录。

✧Create:用于创建文件。

✧Open:用于打开文件。

✧Close:用于关闭文件。

✧Write:用于写文件。

✧Read:用于读文件。

✧Rm:用于删除文件。

数据结构设计磁盘:整个磁盘为一个char数组,数组中的每一个元素当做是一个扇区,每个扇区可以存储1个字节的信息,簇大小为8字节。

FAT表:存储的是指定编号的簇的下一个簇的编号是什么,因为文件是有可能分散在很多的簇里。

文件和文件夹链表:设计为静态链表,每个文件夹都会有一个子目录列表,存在链表中。

文件和目录表:文件和目录相同对待,信息存放在文件目录表中,为一个数组类型。

以上所有的信息存放在一个fs结构体中,所有的结构都为静态实现,所以需要将文件系统存放到磁盘中的时候只需要将整个结构体以二进制性质存放到文件中或者是将从文件中以二进制形式读取。

文件系统的构建实验报告

文件系统的构建实验报告

文件系统的构建实验报告 实验名称:文件系统的构建实验目的:掌握磁盘的工作原理和操作系统进行文件管理的原理实验原理:硬盘的MBR :MBR (Main Boot Record ),按其字面上的理解即为主引导记录区,位于整个硬盘的0磁道0柱面1扇区。

在总共512字节的主引导扇区中,MBR 只占用了其中的446个字节(偏移0000--偏移01BD ),另外的64个字节(偏移01BE--偏移01FD )交给了DPT(Disk Partition Table 硬盘分区表),最后两个字节"55,AA"(偏移01FE- 偏移01FF )是分区的结束标志。

这个整体构成了硬盘的主引导扇区。

硬盘依据分区表中的信息把硬盘划分为最多四个分区(对于扩展分区,可进一步划分为多个逻辑分区)。

U 盘采用类似的方法划分分区。

每个分区或软盘上可建立独立的文件系统。

下图是FAT 文件系统空间分布结构。

实验内容:在掌握磁盘的工作原理和操作系统进行文件管理原理的基础上,自行设计实现在磁盘上建立文件系统的软件,该软件应该具有与Format 类似的功能,至少支持一种文件系统格式,如FAT 、NTFS 或EXT2,至少能够对一种媒体进行格式化,如软盘,U 盘或硬盘(不得在实验室的机器上进行硬盘格式化的实验)等。

不能直接调用操作系统提供的格式化工具或类似SHFormatDrive ()的高层系统函数实现该软件。

在Windows 环境可使用biosdisk()函数完成底层盘操作,在Linux 环境上可参考format 的源代码。

比较自己设计实现的软件.与FORMAT ,分析存在什么异同。

背景知识介绍 一个分区或磁盘能作为文件系统使用前,需要初始化,并将记录数据结构写到磁盘上。

这个过程就叫建立文件系统。

大部分linux 文件系统种类具有类似的通用结构。

其中心概念是超级块superblock, i 节点inode, 数据块data block,目录块directory block, 和间接块indirection block 。

文件管理系统实验报告

文件管理系统实验报告

文件管理系统实验报告文件管理系统实验报告一、引言文件管理系统是现代社会中不可或缺的一部分。

随着信息技术的迅猛发展,文件的产生和管理变得越来越重要。

本实验旨在通过设计和实现一个简单的文件管理系统,探索文件管理的原理和方法。

二、实验目的1.了解文件管理系统的基本概念和功能;2.掌握文件的创建、读取、修改和删除等操作;3.熟悉文件的组织和存储结构;4.实践文件管理系统的设计和实现。

三、实验内容1.文件的创建和读取在文件管理系统中,文件的创建和读取是最基本的操作。

通过调用系统函数,我们可以创建一个新文件,并向其中写入数据。

而读取文件则是通过指定文件路径和文件名来获取文件的内容。

2.文件的修改和删除文件的修改和删除是文件管理系统中的常见操作。

通过系统函数,我们可以打开一个已有的文件,并对其进行修改。

而删除文件则是通过指定文件路径和文件名来删除一个文件。

3.文件的组织和存储结构文件管理系统中,文件的组织和存储结构对于文件的管理和访问有着重要的影响。

常见的文件组织结构包括顺序文件、索引文件和哈希文件等。

在本实验中,我们将选择适合的文件组织结构,并实现相应的存储和检索算法。

四、实验步骤1.设计文件管理系统的数据结构在开始实验之前,我们需要先设计文件管理系统的数据结构。

这包括文件控制块(FCB)、目录项(Directory Entry)和文件块(File Block)等。

通过合理的数据结构设计,可以提高文件管理系统的性能和效率。

2.实现文件的创建和读取功能根据文件管理系统的设计,我们可以开始实现文件的创建和读取功能。

通过调用系统函数,我们可以创建一个新的文件,并向其中写入数据。

而读取文件则是通过指定文件路径和文件名来获取文件的内容。

3.实现文件的修改和删除功能文件的修改和删除是文件管理系统中的常见操作。

通过调用系统函数,我们可以打开一个已有的文件,并对其进行修改。

而删除文件则是通过指定文件路径和文件名来删除一个文件。

文件管理实验报告结果(3篇)

文件管理实验报告结果(3篇)

第1篇一、实验目的本次实验旨在通过实际操作,验证文件管理的有效性和可行性,并对文件管理系统的性能进行评估。

通过实验,了解文件管理的相关原理和方法,提高文件管理的实践能力。

二、实验环境1. 操作系统:Windows 102. 文件管理系统:Windows文件管理器3. 实验数据:实验过程中产生的文件和数据三、实验内容1. 文件创建与删除2. 文件夹创建与删除3. 文件与文件夹的复制、移动、重命名4. 文件属性的设置与修改5. 文件搜索与查找6. 文件权限管理7. 文件压缩与解压四、实验步骤1. 文件创建与删除(1)在Windows文件管理器中,新建一个名为“实验文件.txt”的文本文件。

(2)在“实验文件.txt”上右击,选择“删除”,确认删除。

2. 文件夹创建与删除(1)在Windows文件管理器中,新建一个名为“实验文件夹”的文件夹。

(2)在“实验文件夹”上右击,选择“删除”,确认删除。

3. 文件与文件夹的复制、移动、重命名(1)将“实验文件.txt”复制到“实验文件夹”中。

(2)将“实验文件.txt”移动到桌面。

(3)将“实验文件.txt”重命名为“实验文件修改.txt”。

4. 文件属性的设置与修改(1)在“实验文件修改.txt”上右击,选择“属性”,设置文件属性为“只读”。

(2)修改“实验文件修改.txt”的属性为“隐藏”。

5. 文件搜索与查找(1)在Windows文件管理器中,输入“实验文件”进行搜索。

(2)使用“查找”功能,查找“实验文件修改.txt”。

6. 文件权限管理(1)在“实验文件夹”上右击,选择“属性”,点击“安全”标签。

(2)添加用户权限,设置权限为“完全控制”。

7. 文件压缩与解压(1)将“实验文件夹”压缩为“实验文件夹.zip”。

(2)解压“实验文件夹.zip”到指定位置。

五、实验结果与分析1. 文件创建与删除:实验成功创建和删除了文件,验证了文件管理的可行性。

2. 文件夹创建与删除:实验成功创建和删除了文件夹,验证了文件管理的可行性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作系统课程设计报告简单文件系统的实现专业:班级:姓名:学号:老师:一、课程设计的目的1. 通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部数据结构、功能以及实现过程的理解。

二、课程设计要求1. 在内存中开辟一个虚拟磁盘空间作为文件存储分区,在其上实现一个简单的基于多级目录的单用户单任务系统中的文件系统。

在退出该文件系统的使用时,应将该虚拟文件系统以一个Windows 文件的方式保存到磁盘上,以便下次可以再将它恢复到内存的虚拟磁盘空间中。

2文件存储空间的分配可采用显式链接分配或其他的办法。

3空闲磁盘空间的管理可选择位示图或其他的办法。

如果采用位示图来管理文件存储空间,并采用显式链接分配方式,那么可以将位示图合并到FAT中。

文件目录结构采用多级目录结构。

为了简单起见,可以不使用索引结点,其中的每个目录项应包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。

要求提供以下有关的操作命令:my_format:对文件存储器进行格式化,即按照文件系统的结构对虚拟磁盘空间进行布局,并在其上创建根目录以及用于管理文件存储空间等的数据结构。

my_mkdir:用于创建子目录。

my_rmdir:用于删除子目录。

my_ls:用于显示目录中的内容。

my_cd:用于更改当前目录。

my_create:用于创建文件。

my_open:用于打开文件。

my_close:用于关闭文件。

my_write:用于写文件。

my_read:用于读文件。

my_rm:用于删除文件。

my_exitsys:用于退出文件系统。

三、程序的设计细想和框图1.打开文件函数fopen()(1)格式:FILE *fopen(const char *filename,const char *mode)(2)功能:按照指定打开方式打开指定文件。

(3)输入参数说明:filename:待打开的文件名,如果不存在就创建该文件。

mode:文件打开方式,常用的有:"r":为读而打开文本文件(不存在则出错)。

"w":为写而打开文本文件(若不存在则创建该文件;反之,则从文件起始位置写,原内容将被覆盖)。

"a":为在文件末尾添加数据而打开文本文件。

(若不存在则创建该文件;反之,在原文件末尾追加)。

"r+":为读和写而打开文本文件。

(读时,从头开始;在写数据时,新数据只覆盖所占的空间,其后不变) 。

"w+":首先建立一个新文件,进行写操作,随后可以从头开始读。

(若文件存在,原内容将全部消失) 。

"a+":功能与"a"相同;只是在文件末尾添加新的数据后,可以从头开始读。

另外,上述模式字符串中都可以加一个“b”字符,如rb、wb、ab、rb+、wb+、ab+等组合,字符“b”表示fopen() 函数打开的文件为二进制文件,而非纯文字文件。

(4)输出:一个指向FILE类型的指针。

2.关闭文件函数fclose()(1)格式:int fclose(FILE * stream);(2)功能:用来关闭先前fopen()打开的一个文件。

此动作会让缓冲区内的数据写入文件中,并释放系统所提供的文件资源。

(3)输入参数说明:stream:指向要关闭文件的指针,它是先前执行fopen()函数的返回值。

(4)输出:若关闭文件成功则返回0;有错误发生时则返回EOF并把错误代码存到errno。

3.读文件函数fread()(1)格式:size_t fread( void *buffer, size_t size, size_t count, FILE *stream );(2)功能:读二进制文件到内存。

(3)输入参数说明:buffer:用于存放输入数据的缓冲区的首地址;stream:使用fopen()打开的文件的指针,用于指示要读取的文件;size:每个数据块的字节数;count:要读入的数据块的个数;size*count:表示要求读取的字节数。

(4)输出:实际读取的数据块的个数。

4.写文件函数fwrite()(1)格式:size_t fwite(const void *buffer,size_t size,size_t count,FILE *stream);(2)功能:将数据写到二进制文件中。

(3)输入参数说明:buffer:用于存放输出数据的缓冲区的首地址;stream:使用fopen()打开的文件的指针,用于指示要写出的文件;size:每个数据块的字节数;count:要写出的数据块的个数;size*count:表示要求写出的字符数。

(4)输出:实际写出的数据块的个数。

5.判断文件结束函数feof ()(1)格式:int feof(FILE * stream)(2)功能:用来判断是否已读取到文件末尾。

(3)输入参数说明:stream:使用fopen()打开的文件的指针,用于指示要判断的文件。

(4)输出:如果已读到文件尾则返回非零值,其他情况返回0。

6 主要函数功能实现:int format(); atherBlockNum = -1;ype=GENERAL;}}};struct dirFile/*-------------目录文件结构---------------*/{struct FCB fcb[BlockFcbCount];void init(int _FatherBlockNum,int _CurrentBlockNum,char *name)name,name); atherBlockNum=_FatherBlockNum;fcb[0].currentBlockNum=_CurrentBlockNum;fcb[0].type=DIRECTORY; atherBlockNum=_CurrentBlockNum; ype=Zero; ype==DIRECTORY && strcmp(dir->fcb[i].fname,sonfname)==0 ){printf("该文件夹下已经有同名的文件夹存在了!\n");return 0;}}for(i = 1;i < BlockFcbCount; i++){ype==Zero)break;}if(i == BlockFcbCount){printf("该目录已满!请选择新的目录下创建!\n");return 0;}temp = i;for(i = 3;i < BlockCount;i++) {if(osPoint->FAT1[i] == 0)break;}if(i == BlockCount){printf("磁盘已满!\n");return 0;}iFAT=i;/*-------------接下来进行分配----------*/osPoint->FAT1[iFAT]=osPoint->FAT2[iFAT] = 2; name,sonfname);dir->fcb[temp].type=DIRECTORY;dir->fcb[temp].fatherBlockNum=current;dir->fcb[temp].currentBlockNum=iFAT;ype==DIRECTORY && strcmp(dir->fcb[i].fname,sonfname)==0){break;}}temp=i;if(i==BlockFcbCount){printf("当前目录下不存在该子目录!\n");return 0;}j = dir->fcb[temp].currentBlockNum;struct dirFile *sonDir; ype!=Zero){printf("该文件夹为非空文件夹,为确保安全,请清空后再删除!\n");return 0;}}/*开始删除子目录操作*/osPoint->FAT1[j] = osPoint->FAT2[j]=0; nitialize(); ype == Zero && isFound == 0) {emptyNum = i;isFound = 1;}else if(dir->fcb[i].type==GENERAL && strcmp(dir->fcb[i].fname,name)==0 ){ printf("无法在同一目录下创建同名文件!\n");return 0;}}if(emptyNum == 0){printf("已经达到目录项容纳上限,无法创建新目录!\n");return 0;}for(i = 3;i<BlockCount;i++)name,name);dir->fcb[emptyNum].type=GENERAL;dir->fcb[emptyNum].fatherBlockNum=current;dir->fcb[emptyNum].currentBlockNum=iFAT;dir->fcb[emptyNum].size =0;char* p = osPoint->data[iFAT -3];memset(p,4,BlockSize);printf("在当前目录下创建文本文件成功!\n");return 1;}/*-------查询子目录------------*/int listshow(){int i,DirCount=0,FileCount=0;ype==GENERAL){ n",dir->fcb[i].fname);}if(dir->fcb[i].type==DIRECTORY){ n",dir->fcb[i].fname);}printf("\n该目录下共有 %d 个文本文件, %d 个文件夹\n\n",FileCount,DirCount);return 1;}/*---------在当前目录下删除文件-----------*/int delfile(char *name){int i,temp,j;ype==GENERAL && strcmp(dir->fcb[i].fname,name)==0){break;}}if(i == BlockFcbCount){printf("当前目录下不存在该文件!\n");return 0;}int k;for(k=0;k<OPEN_MAX;k++){if((openlist->f [k].type = GENERAL)&&(strcmp(openlist->f [k].fname,name)==0)){if(openlist->f[k].fatherBlockNum == current){break;}else{printf("该文件未在当前目录下!\n");return 0;}}}if(k!=OPEN_MAX){close(name);}urrentBlockNum ; nitialize(); ")==0){if(current==2){printf("你现已经在根目录下!\n");return 0;current = dir->fcb[0].fatherBlockNum ;currentPath = (0,() - strlen(dir->fcb[0].fname )-1);return 1;}/*进入子目录*ype==DIRECTORY&&strcmp(dir->fcb[i].fname,sonfname)==0){temp=i;break;}}if(i==BlockFcbCount){printf("不存在该目录!\n");return 0;}urrentBlockNum ;currentPath = currentPath+dir->fcb [temp].fname +"\\";printf("进入当前目录下的子目录成功!\n");return 1;}int exit(){name,name)==0 ){if(openlist->f[i].fatherBlockNum ==current){break;}else{printf("该文件处于打开列表中,本系统只能改写当前目录下文件!\n");return 0;}}}if(i==OPEN_MAX){printf("该文件尚未打开,请先打开后写入信息!!\n");return 0;}int active=i;int fileStartNum = openlist->f[active].currentBlockNum - 3 ;startPoint = osPoint->data[fileStartNum];endPoint = osPoint->data[fileStartNum + 1];printf("请输入文本以Ctrl D号结束:\t");char input;while(((input=getchar())!=4)) {if(startPoint < endPoint-1) {*startPoint++ = input;}else{printf("达到单体文件最大容量!");*startPoint++ = 4;break;}}return 1;}int read(char *file)/*---------选择一个打开的文件读取信息----------*/{int i,fileStartNum;char *startPoint,*endPoint;name,file)==0 ){if(openlist->f[i].fatherBlockNum ==current){break;}else{printf("该文件处于打开列表中,本系统只能阅读当前目录下文件!\n");return 0;}}}if(i==OPEN_MAX){printf("该文件尚未打开,请先打开后读取信息!\n");return 0;}int active=i;urrentBlockNum - 3 ;startPoint = osPoint->data[fileStartNum];endPoint = osPoint->data[fileStartNum + 1];printf("该文件的内容为: ");while((*startPoint)!=4&& (startPoint < endPoint)){putchar(*startPoint++);}printf("\n");return 1;}int open(char *file)ype ==GENERAL && strcmp(openlist->f [i].fname,file)==0&&openlist->f[i].fatherBlockNum == current){printf("该文件已经被打开!\n");return 0;}}n");return 0;}ype==GENERAL && strcmp(dir->fcb[i].fname,file)==0 ) {FcbIndex=i;break;}}if(i==BlockFcbCount){printf("当前目录下不存在该文件!\n");return 0;}ype = GENERAL)&&(strcmp(openlist->f [i].fname,file)==0)){if(openlist->f[i].fatherBlockNum == current) {break;}else{printf("该文件已打开,但未在当前目录下,无法关闭!\n");return 0;}}}if(i==OPEN_MAX){printf("该文件未在打开列表中!\n");return 0;}int active=i;openlist->files --;openlist->f[active].initialize();OpenFileCount--;printf("该文件已关闭!\n");return 1;}int main(){printf("@ Welcome To My Operate System Of File(FAT) @n");printf("\n 以下是使用说明书:\n"); @ \n");printf("@ exit :安全退出该文件系统,保存信息. @ \n");printf("@ mkdir dirname :创建子目录. @ \n");printf("@ rmdir dirname :删除子目录. @ \n");printf("@ ls dirname :显示当前目录下信息. @ \n");printf("@ cd dirname :更改当前目录. @ \n");printf("@ create filename :创建一个新文件,并且打开. @ \n");printf("@ write filename :选择一个打开的文件写入信息 @ \n");printf("@ read filename :选择一个打开的文件读取信息. @ \n");printf("@ rm filename :删除文件. @ \n");printf("@ open filename :打开文件. @\n");printf("@ close filename :关闭文件. @\n");printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n\n");openlist=new OPENLIST;.\n");format();printf("初始化已经完成,现在可以进行操作了!\n\n");}while(1){cout<<currentPath;cin>>cmd;if(cmd=="format"){format();}else if(cmd=="mkdir"){cin>>command;mkdir(command);}else if(cmd=="rmdir"){cin>>command;rmdir(command);}else if(cmd=="ls"){listshow();}else if(cmd=="cd"){cin>>command;changePath(command);}else if(cmd=="create"){cin>>command;create(command);}else if(cmd=="write"){cin>>command;write(command);}else if(cmd=="read"){cin>>command;read(command);}else if(cmd=="rm"){cin>>command;delfile(command);}else if(cmd=="open"){cin>>command;open(command);}else if(cmd=="close"){cin>>command;close(command);}else if(cmd=="exit"){exit();break;}else cout<<"无效指令,请重新输入:"<<endl;}printf("Thank you for using my file system!\n");return 1;}11。

相关文档
最新文档