-
- 理解文件存储空间的管理;
- 掌握文件的物理结构、目录结构和文件操作;
- 实现简单文件系统管理;
- 加深文件系统实现过程的理解;
-
文件存储空间管理可采取链接结构(如FAT文件系统中的显式链接等)或者其他学过的方法;空闲空间管理可采用位图或者其他方法;文件目录采用多级目录结构,目录项目中应包含:文件名、物理地址、长度等信息。文件系统提供的操作:格式化、创建子目录、删除子目录、显示目录、更改当前目录、创建文件、打开文件、关闭文件、写文件、读文件、删除文件...
-
系统:Windows11
IDE:VScode
requirements: python3.8,PyQt5
-
确保
pip install PyQt5在根目录执行
python main.py
-
类 作用 Inode Inode类表示文件的元数据,包括文件名、大小、创建时间、修改时间、文件权限类型、文件路径和存储数据块的列表,即FCB块。Directory Directory类表示目录,包含子目录和文件的字典,并提供添加、移除和列出目录内容的功能。IndexedFileSystem IndexedFileSystem类表示文件系统,包含所有目录和文件的管理,提供文件系统的格式化、目录切换、文件和目录的创建、删除、复制和移动功能。FileManagementSystem 继承自QMainWindow,包含了整个系统的Qt样式和交互 -
-
- 文件存储空间管理:使用了索引存储的方式
- 空闲空间管理:采用了集合set的方式,存储了所有当前空闲的内存块
- 文件目录:采用了树形目录。文件系统根目录为
/root,可以包含文件和子目录。文件和目录的层级结构可以任意嵌套。 - 文件系统大小:文件系统的大小为 1 MB,每个数据块的大小为 512 字节,总共有 2048 个数据块。
-
- 格式化:初始化文件系统,清空所有数据块和目录结构。
- 目录管理:支持创建、删除和切换目录。
- 文件管理:支持创建、读取、写入、删除、复制和移动文件。
- 持久化:支持将文件系统保存到磁盘,并从磁盘加载文件系统。
-
-
格式化功能通过
IndexedFileSystem类中的format方法实现。此方法会清空所有数据块,重置空闲块集合,重新初始化根目录,并重置当前目录为根目录。 执行格式化后,文件系统恢复到初始状态,所有存储的数据和目录结构将被清除,空闲块集合重新填满。 -
创建子目录功能通过
IndexedFileSystem类中的create_directory方法实现。此方法接收一个目录名称作为参数,创建一个新的Directory对象,并将其添加到当前目录的子目录字典中。 在当前目录下成功创建新的子目录,并在目录结构中添加该子目录的元数据。 -
删除子目录功能通过
Directory类中的remove_subdirectory方法实现。此方法接收一个子目录名称作为参数,从当前目录的子目录字典中删除该子目录。指定的子目录及其内容将被删除,目录结构中不再包含该子目录的信息。 -
显示目录内容通过
IndexedFileSystem类中的list_directory方法实现。此方法调用当前目录的list_contents方法,列出所有文件和子目录的名称。用户可以查看当前目录下的所有文件和子目录的名称,以便进行进一步的操作。同时,系统会根据当前进入的文件夹自动在左侧目录栏展开到当前文件及部分, -
创建文件功能通过
IndexedFileSystem类中的allocate_file方法实现。此方法接收文件名称和文件数据作为参数,计算所需的数据块,查找空闲块,将数据写入数据块,并在当前目录中添加新的Inode。 在当前目录下成功创建新的文件,分配所需的数据块并存储文件数据,文件元数据被记录在目录中。 -
读取文件功能通过
IndexedFileSystem类中的read_file方法实现。此方法接收文件名称作为参数,找到对应的Inode,读取其数据块中的内容,并返回文件数据。 用户可以读取并获取指定文件的数据内容,以便进行查看或进一步处理。 -
写入文件功能通过
IndexedFileSystem类中的write_file方法实现。此方法接收文件名称和新数据作为参数,重新计算所需数据块,更新文件数据块,释放多余的块,并更新文件元数据。指定文件的内容将被新数据覆盖,文件的数据块可能会重新分配,文件元数据中的修改时 -
删除文件功能通过
IndexedFileSystem类中的delete_file方法实现。此方法接收文件名称作为参数,找到对应的Inode,释放其所有数据块,从当前目录中移除该文件。 指定文件及其数据块将被删除,文件系统中不再包含该文件的信息,数据块将重新变为空闲状态。 -
复制文件功能通过
IndexedFileSystem类中的copy_file方法实现,通过copy_item方法进行。获取源文件的路径和名称,读取源文件的数据块,确定目标路径,如果目标路径与源路径相同,生成一个不重名的新文件名,最后在目标目录中分配新的文件节点并复制数据块。在执行复制文件操作后,指定的文件将在目标目录中创建一个副本,副本文件的内容与原文件完全一致,如果在同一目录下会生成一个带有_copy后缀的新文件。 -
粘贴文件功能在
FileManagementSystem类中实现,通过paste_item方法进行。检查是否存在复制的文件节点。如果是文件节点,调用copy_file方法复制文件到当前目录。如果是目录节点,调用copy_directory方法递归复制目录及其内容。更新文件视图和目录树视图。当用户粘贴文件时,系统会根据先前复制的文件或目录信息,在当前目录中创建一个副本。如果目标目录是源目录的子目录,会弹出警告窗口,防止无限递归复制。 -
显示文件或目录属性功能通过
show_inode_properties方法实现。此方法接收Inode对象作为参数,创建一个对话框显示文件或目录的各种属性信息。 用户可以查看指定文件或目录的详细属性信息,包括名称、路径、大小、创建时间、修改时间和类型等。 -
将操作写入磁盘功能通过
IndexedFileSystem类中的save_to_disk方法实现。此方法接收文件名作为参数,将整个文件系统对象序列化并保存到指定文件中。文件系统的当前状态将被保存到磁盘文件中,确保所有操作结果被持久化存储,以便在下次启动时恢复文件系统的状态。
-
文件类型尚未开发
支持delete快捷键
-
文件系统是我在操作系统中最喜欢的章节,在实操写代码的过程中,更深刻的理解了文件系统的一些工作原理,对文件存储空间管理、空闲空间管理以及多级目录结构等概念有了更深的理解。
在此过程中我提升了自己的编程技巧和编程习惯。
但是代码的规范性和整洁程度不够完善,在此次项目中没有事先做好项目架构,对前端的类的划分很模糊,在之后有时间会进一步完善。
-
将代码重构,拆分成更多的类便于维护。
UI界面改进,增强其可交互性。
补充功能,包括剪切、查看方式、撤销等等,尽可能与实际操作系统的文件系统靠拢。




















