操作系统课程设计-文件管理实验报告
- 格式:doc
- 大小:1.30 MB
- 文档页数:14
操作系统文件管理实验报告操作系统文件管理实验报告一、实验目的操作系统是计算机系统中的核心软件之一,负责管理计算机硬件资源和提供用户与计算机硬件之间的接口。
文件管理是操作系统的重要功能之一,它涉及到文件的创建、读取、写入、删除等操作。
本次实验旨在通过编写简单的文件管理程序,加深对操作系统文件管理机制的理解。
二、实验环境本次实验使用C语言编写,运行在Linux操作系统上。
实验过程中使用了gcc 编译器和Linux系统提供的文件管理函数。
三、实验内容1. 文件的创建在操作系统中,文件是存储在存储介质上的数据集合。
文件的创建是指在存储介质上分配一块空间,并为其分配一个唯一的文件名。
在本次实验中,我们使用了Linux系统提供的open函数来创建文件。
open函数接受两个参数,第一个参数是文件名,第二个参数是文件的打开模式。
通过调用open函数,我们可以在指定的路径下创建一个文件。
2. 文件的读取和写入文件的读取和写入是文件管理的核心操作。
在本次实验中,我们使用了Linux 系统提供的read和write函数来实现文件的读取和写入。
read函数接受三个参数,第一个参数是文件描述符,第二个参数是存储读取数据的缓冲区,第三个参数是要读取的数据的长度。
write函数也接受三个参数,第一个参数是文件描述符,第二个参数是要写入的数据的缓冲区,第三个参数是要写入的数据的长度。
通过调用read和write函数,我们可以实现对文件的读取和写入操作。
3. 文件的删除文件的删除是指在存储介质上释放文件占用的空间,并删除文件的相关信息。
在本次实验中,我们使用了Linux系统提供的unlink函数来删除文件。
unlink函数接受一个参数,即要删除的文件名。
通过调用unlink函数,我们可以删除指定的文件。
四、实验步骤1. 创建文件首先,我们使用open函数创建一个文件。
在调用open函数时,需要指定文件的路径和文件的打开模式。
文件的路径可以是绝对路径或相对路径,文件的打开模式可以是只读、只写、读写等。
竭诚为您提供优质文档/双击可除操作系统文件管理实验报告篇一:操作系统实验报告文件管理昆明理工大学信息工程与自动化学院学生实验报告(201—201学年第二学期)课程名称:操作系统开课实验室:年月日一、实验目的用c或c++语言编写和调试一个简单的文件系统,模拟文件管理的基本功能。
从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。
二、实验原理及基本技术路线图(方框原理图)用c模拟实现文件系统的管理;要求设计一个多级目录结构的文件系统,能正确描述文件控制块,采用合理的外存分配方式,能实现基本的目录及文件的操作,包括创建、删除、重命名、复制、移动等功能,并对文件有一定的存取权限控制。
功能设计:helpdirexitcreate[文件名]cdir[目录名]read[文件名]close[文件名]edit[文件名]cd[目录名]attr[文件名]del[文件名]rename[文件名]显示命令帮助显示当前目录下的文件和文件夹退出系统创建文本文件创建文件夹读取一个文件最多可同时读取五个关闭一个文件编辑一个文件进子目录或者上级目录显示该文件的属性删除文件重命名编辑功能流程图删除文件流程图创建文件流程图核心算法:boolFormat(void);//格式化boolinstall(void);//装载虚拟硬盘的数据voidlogin(void);/用户登陆voidshowmenu(void);//显示功能菜单boolonAction(void);//用户选择功能并执行voidcreateFile(stringstr);//创建文件boolread(stringstr);//读取文件voideditFile(stringstr);//编辑文件voidDelete(stringstr);//删除一个文件数据结构:始地址/*inode结构体*/structinode{unsignedshortdi_tag;/*inode标识*/ /*关联文件数,当为0时表示删除文件,如一个目录至少包含两个文件:"."和".."*/constunsignedintAccounT_num=10;//用户数量/*---------常变量------*/constunsignedintbLocK_sIZe=512;//块长constunsignedintDATA_bLocK_num=512;//数据块数量constunsignedintDInoDe_sTART=4*bLocK_sIZe;//inode起始位置constunsignedintDInoDe_sIZe=512;constunsignedintDIn oDe_num=32;//inode大小//inode数量constunsignedintDATAsTART=(2+DInoDe_num)*bLocK_sIZe ;//数据区的开unsignedshortdi_number;unsignedshortdi_mode;/*存取模式:0为目录,1为文件*/unsignedshortdi_userID;/*当前inode所属用户0为根目录ID,一次下去是管理员目录、用户目录*/unsignedshortdi_access;/*访问权限0为不允许普通用户访问(公共目录),1为允许普通用户访问*/};unsignedshortdi_size;/*文件大小,目录没有大小,值为0*/unsignedshortdi_ctime;/*创建时间*/unsignedshortdi_mtime;/*最后一次修改时间*/unsignedshortdi_block[DATA_bLocK_num];/*数据块块地址编号*//**超级块***/structsuper_block{};/**账户信息**/structuser{};/**文件/目录结构**/structdirectory{unsignedshorts_inodes_count;/*文件系统中inode的总数*/unsignedshorts_blocks_count;/*数据块总数*/unsignedshorts_r_blocks_count;/*保留块总数*/unsignedshorts_free_blocks_count;//空闲块总数unsignedshorts_free_inodes_count;/*空闲的inode总数*/unsignedshorts_log_block_size;/*block的大小*/unsignedshortuser_id;//用户IDunsignedshortuser_access;//权限stringusername;stringpassword;//用户名//密码篇二:操作系统课程设计-文件管理实验报告操作系统课程实验报告20XX~20XX年度第1学期院系:学号:姓名:任课教师:成绩评定:实验一题目:文件管理完成日期:年月日1、实验目的了解文件管理的功能和任务,理解文件系统组成和特点,熟悉文件系统的访问和操作。
操作系统文件管理实验报告电大教师评语教师签字日期成绩学生姓名学号实验名称操作系统文件管理实验实验报告一、实验目的1、加深对文件、目录、文件系统等概念的理角2、掌握 Llnu_ 文件系统的目录结构3、掌握有关 Llnu_ 文件系统操作的常用命令4、了解有关文件案例性方面的知识二、实验要求:1、正确使用文件管理命令,能熟练地对文件进行浏览、拷贝、移动和删除。
2、能熟练地确定和更改工作目录,查看内容和文件属性,创建和删除目录。
3、正确地理解文件的权限,并能进行相应更改。
4、理解文件的类型及其表示形式。
5、理解文件名的表示形式,在模式匹配中能正确使用通配符。
三、实验步骤( 一) 浏览文件系统 1、运行 pwd 命令。
确定当前的工作目录。
2、文件列表。
使用 ls 命令显示当前工作目录的内容。
使用 ls-l 命令显示文件列表,对照屏幕上的显示信息,理解各字段的含义。
使用 ls-ai 命令显示文件列表,观察显示的信息。
注意列出的前两项,它们分别表示当前目录和父目录。
看一下,是否还有其他隐藏的文件? 运行不带-a 选项的 ls 命令。
注意,文件的 I 节点号不再出现。
运行不带-i 选项的 ls 命令,注意,怎么不再显示隐藏文件了。
3、目录操作。
使用 mkdir 命令建立一个子目录。
执行带 ls-d 命令,观察有关子目录的信息。
执行 cd/命令,将工作目录改到根目录(/)上。
使用绝对路径和相对路径两种方式,并执行 pwd 命令确认当前工作目录。
执行 ls/命令列出根目录的内容,再分别列出各子目录的内容。
体会各子目录的作用以及访问权限。
执行 ls-l /dev 命令列出/dev 的内容,注意各行第一个字符 b 和c 的含义以及规定的访问权限。
执行不带参数的命令 cd,然后用 pwd 命令确认当前的工作目录是什么。
执行命令 cd../...工作目录移到什么地方了? ( 二) 查看文件执行 cd 命令,将工作目录改到主目录上。
文件管理实验报告一、实验目的文件管理是操作系统的重要组成部分,本次实验的目的在于深入理解文件管理的基本概念和原理,掌握文件的存储、组织、检索和访问等操作,熟悉常见的文件系统结构和功能,提高对文件管理系统的实际操作能力和问题解决能力。
二、实验环境1、操作系统:Windows 102、开发工具:Microsoft Visual Studio 2019三、实验内容1、文件的创建、删除和重命名使用 C++或 Python 编程语言,通过系统调用或相关库函数实现文件的创建、删除和重命名操作。
观察文件在操作系统中的实际表现,如文件的出现和消失,文件名的更改等。
2、文件的读写操作实现对文本文件和二进制文件的读写操作,包括读取文件的全部内容、按行读取文件、向文件写入数据等。
分析不同读写模式(如只读、只写、读写等)对文件操作的影响。
3、文件属性的获取和修改获取文件的基本属性,如文件大小、创建时间、修改时间、访问权限等。
尝试修改文件的部分属性,如只读属性、隐藏属性等,观察修改后的效果。
4、文件目录的操作创建、删除和遍历目录。
实现文件在不同目录之间的移动和复制操作。
四、实验步骤1、文件的创建、删除和重命名以下是使用 Python 实现文件创建、删除和重命名的示例代码:```pythonimport os创建文件file_path ="exampletxt"with open(file_path, 'w') as f:fwrite("This is a test file")删除文件osremove(file_path)重命名文件new_file_path ="renamed_exampletxt"osrename(file_path, new_file_path)```运行代码后,可以在指定的目录中观察到文件的创建、删除和重命名操作的结果。
2、文件的读写操作读取文本文件的示例代码:```pythonfile_path ="text_filetxt"with open(file_path, 'r') as f:content = fread()print(content)```按行读取文本文件的示例代码:```pythonfile_path ="text_filetxt"with open(file_path, 'r') as f:for line in f:print(linestrip())```写入数据到文件的示例代码:```pythonfile_path ="outputtxt"with open(file_path, 'w') as f:fwrite("New data written to file")```分别运行上述代码,观察文件的读写结果。
操作系统文件管理实验报告-图文实验报告课程名称计算机操作系统实验名称文件管理班级学号姓名成绩指导教师赵安科实验日期 2021年6月18日一.实验题目:文件管理二.实验内容:模拟文件存储空间的管理,采用空白文件目录法和空白块链法实施空间分配。
三.实验说明:文件存储空间管理是文件系统的重要内容。
常用的管理思想有空白文件目录法、空白块链法和位示图法。
本实验采用前两种方法进行空间分配。
(1)空白文件目录法进行空间分配时,需要建立相关的数据结构,记录目前空白区域和已使用区域,假设开始时全部区域空闲。
当有文件需要存储时,先检查空白文件目录,找到适合区域立即分配,并修改空白文件目录表和已使用区域分配表。
为此需建立两张表格,分别记录相关数据。
空白文件目录表(初始)序号 1 首空白块号 0 空白快个数 100 物理块号0,1,2,……,98,99 备注空白文件目录(中间)序号 1 2 3 4 5 首空白块号 2 9 25 39 …… 空白块个数 4 3 5 2 …… 物理块号 2,3,4,5 9,10,11 25,26,27,28,2939,40 …… 标志未分配未分配未分配未分配未分配已使用区域表(中间)上述两张表的数据在系统运行中是发生变化的。
文件标识beta Alpha Toyota Sony Ford …… 首块号 0 6 12 30 50 …… 文件块个数 2 3 13 9 4 …… 状态占用占用占用占用占用…… 备注文件空闲区分配和释放算法如下图所示:图一文件空闲区分配算法图二文件空闲区回收算法(2)空白块链法进行空间分配时,需要建立链表数据结构,将空闲块按顺序加以组织,分配和回收时在链首完成,同时建立文件目录,记录文件占用空间情况。
文件标识beta Alpha Toyota Sony Ford …… 首块号 0 6 12 30 50 …… 备注四.实验要求:(1)自拟模拟数据演示运行结果(假定系统可用空闲块数为100)。
一、实验目的1. 理解文件管理的概念和基本原理。
2. 掌握文件系统的结构及其组成。
3. 学会使用文件管理系统进行文件操作。
4. 了解文件系统的性能优化方法。
二、实验环境1. 操作系统:Windows 102. 文件管理系统:Windows Explorer3. 实验工具:文本编辑器(如Notepad)三、实验内容1. 文件系统的基本概念2. 文件系统的结构3. 文件操作4. 文件系统性能优化四、实验步骤1. 文件系统的基本概念(1)打开Windows Explorer,观察文件系统的组织结构。
(2)分析文件系统的组成,包括文件、目录、驱动器等。
(3)了解文件名、扩展名、路径等基本概念。
2. 文件系统的结构(1)创建一个新文件夹,命名为“实验文件夹”。
(2)在“实验文件夹”中创建一个文本文件,命名为“实验报告.txt”。
(3)观察文件系统的树状结构,理解目录与文件之间的关系。
3. 文件操作(1)打开“实验报告.txt”,使用文本编辑器进行编辑。
(2)保存并关闭编辑器。
(3)将“实验报告.txt”复制到“实验文件夹”的子目录中。
(4)删除“实验文件夹”中的“实验报告.txt”。
(5)重命名“实验文件夹”中的子目录。
4. 文件系统性能优化(1)查看磁盘属性,了解磁盘空间占用情况。
(2)对磁盘进行碎片整理。
(3)使用磁盘清理工具清理磁盘中的临时文件。
五、实验结果与分析1. 文件系统的基本概念通过实验,我们了解了文件系统的基本概念,包括文件、目录、驱动器等。
文件系统是操作系统管理文件的一种数据结构,用于存储、检索、更新和删除文件。
2. 文件系统的结构实验中,我们创建了文件夹和文件,并观察了文件系统的树状结构。
文件系统采用分层结构,目录与文件之间通过路径连接。
3. 文件操作实验中,我们进行了文件操作,包括创建、编辑、复制、删除和重命名。
这些操作是文件管理的基本技能。
4. 文件系统性能优化通过磁盘碎片整理和清理磁盘中的临时文件,我们提高了文件系统的性能。
操作系统实验报告文件管理文件管理是操作系统的重要功能之一,它负责对计算机系统中的文件进行组织、存储和访问。
文件管理系统的设计和实现对操作系统的性能和可靠性起着重要作用。
本文将介绍文件管理的基本概念、文件系统的组织方式和文件的操作方法。
一、文件管理的概念文件是计算机系统中存储和管理数据的基本单位,它可以是文本、图像、音频、视频等各种类型的数据。
文件管理的目标是实现对文件的有效组织和高效访问,使得用户和应用程序可以方便地读取、写入和删除文件。
文件管理系统主要包括以下几个方面:1.文件组织方式:文件可以按照不同的方式进行组织,包括顺序文件、索引文件、哈希文件等。
不同的组织方式有不同的优势和适用场景,可以根据实际需要选择合适的组织方式。
2.文件存储管理:文件在存储设备上的存储方式包括连续存储、链式存储和索引存储等。
不同的存储方式对文件的读写性能和空间利用率有影响,需要根据实际情况进行选择。
3.文件访问控制:对文件的访问需要进行权限控制,保证只有合法的用户或应用程序可以读取和写入文件。
文件访问控制主要通过访问权限和文件属性来实现。
二、文件系统的组织方式1.单级目录结构:这是最简单的文件系统组织方式,所有文件都位于同一个目录下。
由于没有目录的嵌套结构,文件的查找和管理比较简单,但是对于大量文件的管理不够灵活。
2.层次目录结构:该方式通过目录的嵌套结构来组织文件,可以形成一棵树状结构。
目录可以包含子目录和文件,用户可以通过目录路径来访问文件。
这种组织方式可以更好地组织大量的文件,提高文件的查找效率。
3.索引目录结构:该方式使用一个索引表来记录文件的位置和属性信息,用户通过索引表中的索引来访问文件。
索引表可以根据文件名、文件类型等信息快速定位到文件的位置,提高访问效率。
此外,索引表还可以支持对文件的动态增删改查操作。
三、文件的操作方法1.创建文件:文件的创建是指在文件系统中创建一个新文件,并为其分配存储空间。
创建文件时需要指定文件名和文件类型,并根据需要为文件设置访问权限和属性。
操作系统课程实验报告2013~2014年度第1学期院系:学号:姓名:任课教师:成绩评定:实验一题目:文件管理完成日期:年月日1、实验目的了解文件管理的功能和任务,理解文件系统组成和特点,熟悉文件系统的访问和操作。
实验要求用高级语言编写和调试一个简单的模拟文件管理程序。
加深理解有关盘块的分配与回收、目录管理等的具体实施策略。
2.、实验内容模拟一个资源管理器进行文件操作,包括建立和删除目录、建立和删除文件等基本文件操作。
建立相应的数据结构(如:位示图等),模拟盘块管理。
可以参照图6界面进行设计。
3、算法设计1)、定义主面板MainFrame,布局好各个控件,并初始化/** 往node节点下添加一个子节点obj;*/public void addChild(Object obj, DefaultMutableTreeNode node) {if (obj != null && node != null) {DefaultMutableTreeNode temp = new DefaultMutableTreeNode(obj);if (node.getAllowsChildren())node.add(temp);if(!((String) obj).equals("A:\\") && ((String) obj).length() <= 3)// 防止读取A软驱,会出现异常;用于初始用的;addChildren(cmd.listAll((String) obj), temp);}}/** 在node节点下添加数组children;*/public void addChildren(String[] children, DefaultMutableTreeNode node) { if (children != null && node != null) {for (int i = 0; i < children.length; i++) {addChild(children[i], node);}}}/** 对树的节点进行预提取;*/public void addPrefetchChildren(String path, DefaultMutableTreeNode node) { addChildren(cmd.listDirectory(path), node);}/** 对路径路径进行连接;(已经获得了所有的整个路径,需要量转化)*/public String toFilePath(String str) {// 先去掉头尾的[];String pa = str.substring(1, str.length() - 1);String[] temp = pa.split(", ");String path = "";for (int i = 1; i < temp.length; i++) {if (!path.endsWith("\\") && !path.equals(""))// 不为空是为去根节点;path += "\\";path += temp[i];}return path;}public String toPFilePath(String str) {// 先去掉头尾的[];String pa = str.substring(1, str.length() - 1);String[] temp = pa.split(", ");String path = "";for (int i = 1; i < temp.length - 1; i++) {if (!path.endsWith("\\") && !path.equals(""))// 不为空是为去根节点;path += "\\";path += temp[i];}return path;}public class ExpandListener implements TreeWillExpandListener {/** 树展开及收缩监听;*/private MainFrame mainFrame = null;public ExpandListener(MainFrame mainFrame) {this.mainFrame = mainFrame;}public void treeWillExpand(TreeExpansionEvent event) {// 对节点的路径进行转化String path = toFilePath(event.getPath().toString());TreePath treePath = event.getPath();DefaultMutableTreeNode node = (DefaultMutableTreeNode) treePath.getLastPathComponent();// System.out.println("所展开节点的路径:" + path);// System.out.println(treePath);if (node.getDepth() < 2) {Enumeration children = node.children();String filePath = "";while (children.hasMoreElements()) {DefaultMutableTreeNode temp = (DefaultMutableTreeNode) children.nextElement();filePath = "";filePath = path;if (!filePath.endsWith("\\"))filePath += "\\";filePath += temp.toString();// System.out.println("temp=" +filePath);mainFrame.addPrefetchChildren(filePath, temp);}}}2)、添加功能“添加文件(夹)addframe()”、“修改文件(夹)mvframe()”public void addframe() {JFrame addFrame = new JFrame();JLabel jlbl = new JLabel("请输入要添加的文件(夹)名:");addrs = new JLabel("");addrs.setBounds(180, 10, 100, 25);jlbl.setBounds(10, 10, 170, 25);addfile = new JTextField();addfile.setBounds(10, 40, 260, 25);btnaddf = new JButton("添加文件");btnaddd = new JButton("添加文件夹");btnaddf.setBounds(20, 80, 100, 25);btnaddd.setBounds(160, 80, 100, 25);btnaddf.addActionListener(this);btnaddd.addActionListener(this);addFrame.add(jlbl);addFrame.add(addrs);addFrame.add(addfile);addFrame.add(btnaddf);addFrame.add(btnaddd);addFrame.setBounds(400, 350, 300, 150);addFrame.setTitle("添加文件(夹)");addFrame.setLayout(null);addFrame.setVisible(true);}public void mvframe() {JFrame mvFrame = new JFrame();JLabel jlbl = new JLabel("请输入修改后的文件名:");mvrs = new JLabel("");mvrs.setBounds(160, 10, 140, 25);jlbl.setBounds(10, 10, 170, 25);mvfile = new JTextField();mvfile.setBounds(10, 40, 260, 25);btnmvf = new JButton("修改文件名");btnmvd = new JButton(" 修改文件夹名");btnmvf.setBounds(10, 80, 120, 25);btnmvd.setBounds(150, 80, 120, 25);btnmvf.addActionListener(this);btnmvd.addActionListener(this);mvFrame.add(jlbl);mvFrame.add(mvrs);mvFrame.add(mvfile);mvFrame.add(btnmvf);mvFrame.add(btnmvd);mvFrame.setBounds(400, 350, 300, 150);mvFrame.setTitle("修改文件(夹)名");mvFrame.setLayout(null);mvFrame.setVisible(true);}}3)显示文件* 显示系统中的所有盘符;public String[] ListDisks() {File roots[] = File.listRoots();// 根盘符;String disks[] = new String[roots.length];for (int i = 0; i < roots.length; i++) {disks[i] = roots[i].toString();}return disks;}* 获得路径path下的文件;public String[] listAll(String path) {try {File f = new File(path);String[] fileName;String tmp = null;mainFrame.fileshow.setText(null);mainFrame.filestyle.setText(null);if (f.isDirectory()) {fileName = f.list();// System.out.println("共有" + fileName.length + "个文件");for (int i = 0; i < fileName.length; i++) {mainFrame.fileshow.append(fileName[i] + '\n');tmp = path + '\\' + fileName[i];// System.out.println(tmp);if (listDirectory(tmp) != null) {mainFrame.filestyle.append("文件夹\n");} else {mainFrame.filestyle.append("文件\n");}}return fileName;} else if (f.isFile()) {System.out.println("这是一个文件");return null;} else {// System.out.println(path);return null;}} catch (Exception e) {return null;}}public String[] listDirectory(String path) {File f = new File(path);String[] fileName;if (f.isDirectory()) {fileName = f.list();return fileName;} else {// System.out.println(path + "是文件");return null;}}* 进行md操作;md <目录名> 功能: 创建新目录public void md(String directory) {if (!mainFrame.currentPath.equals("")) {String temp = mainFrame.currentPath + "\\" + directory;File newFile = new File(temp);if (!newFile.exists()) {try {if (newFile.isDirectory() == false) {newFile.mkdirs();System.out.println("文件夹创建成功!");} else {System.out.println("文件夹创建出错!");}} catch (Exception e) {System.out.println("出错信息:" + e.getMessage());}} else {System.out.println("文件夹已经存在");}}}* 进行rd操作;rd <目录名> 功能: 删除目录;public void del() {String temp = mainFrame.currentPath;File file = new File(temp);if (file.exists()) {if (file.delete()) {mainFrame.fileshow.setText("文件(夹)删除成功!");} else {mainFrame.fileshow.setText("文件(夹)删除操作出错!");}} else {mainFrame.fileshow.setText("文件(夹)不存在");}}/** 进行edit操作:edit <文件名> 功能: 新建文件*/public void edit(String file) {if (!mainFrame.currentPath.equals("")) {String temp = mainFrame.currentPath + "\\" + file;File newFile = new File(temp);if (newFile.exists()) {mainFrame.addrs.setText("文件已经存在!");System.out.println("文件已经存在!");} else {try {newFile.createNewFile();mainFrame.addrs.setText("文件创建成功!");System.out.println("文件创建成功!");} catch (Exception e) {System.out.println("文件创建失败:" + e.getMessage());}}}}public void mvf(String file){if (!mainFrame.PPath.equals("")) {String temp = mainFrame.PPath + "\\" + file;File newFile = new File(mainFrame.currentPath);if (newFile.exists()) {if(newFile.renameTo(new File(temp))==true){mainFrame.mvrs.setText("修改文件名成功!");}else{mainFrame.mvrs.setText("存在同名文件!");}}}}public void mvd(String dir){if (!mainFrame.PPath.equals("")) {String temp = mainFrame.PPath + "\\" + dir;File newFile = new File(mainFrame.currentPath);if (newFile.exists()) {if(newFile.renameTo(new File(temp))==true){mainFrame.mvrs.setText("修改文件夹名成功!");}else{mainFrame.mvrs.setText("存在同名文件夹!");}}}}}4、运行与测试运行时,弹出主界面双击文件盘C在E盘路径添加文件夹操作系统,再添加文件操作系统如果文件已存在会显示可以更改文件名称删除文件,不过有个BUG,要文件一层层删,才可以删除。
操作系统文件管理实验报告操作系统文件管理实验报告1:引言本实验报告旨在详细描述操作系统文件管理实验的设计、实施和结果。
文件管理是操作系统的重要组成部分,负责对计算机中的文件进行组织、存储和访问。
本实验通过模拟文件管理的过程,加深对文件管理的理解和实践。
2:实验目的本实验的主要目的是:- 理解文件系统的概念和原理- 掌握文件的创建、读取、写入和删除等基本操作- 实施并测试文件的分配和回收算法- 评估不同的文件分配算法对系统性能的影响3:实验环境本实验的实施环境如下:- 操作系统:Windows 10- 开发环境:C++ 编程语言4:实验内容4.1 文件系统设计在文件系统设计中,首先确定文件的基本单位,例如块或扇区。
然后,定义文件控制块(FCB)结构,用于存储文件的元数据信息,如文件名、大小、创建时间、权限等。
接下来,设计文件分配表,记录系统中每个块的使用情况,用于实现文件的分配和回收。
4.2 文件的创建和删除在文件的创建过程中,首先为文件分配空间,并更新文件分配表。
然后,创建文件的FCB,并将其到目录项中。
在文件的删除过程中,首先释放文件的空间,并更新文件分配表。
然后,删除文件的FCB,并从目录项中移除。
4.3 文件的读写操作文件的读写操作是用户对文件进行读取和修改的过程。
在文件读取操作中,首先找到要读取的文件的FCB,获取文件的起始块地址,并从起始块中读取数据。
在文件写入操作中,首先找到要写入的文件的FCB,获取文件的起始块地址,并将数据写入起始块。
若文件大小超过起始块的容量,则按照一定的分配算法继续分配空间。
4.4 文件分配算法文件分配算法决定了操作系统如何管理文件的空间分配。
常用的文件分配算法包括顺序分配、分配和索引分配。
顺序分配将文件连续地存储在磁盘上,易于实现但可能产生外部碎片。
分配使用链表结构将文件存储在磁盘的不连续块中,不易产生外部碎片但可能引起存取时间增长。
索引分配使用索引表将文件存储在磁盘的不连续块中,不易产生外部碎片且存取时间相对较短,但索引表本身需要占用存储空间。
操作系统文件管理实验报告.
操作系统文件管理实验报告是操作系统实验课程中常见的实验报告,是对学生在实验过程中所掌握的知识和技能的总结。
实验报告的主要内容包括:实验目的、实验原理、实验步骤、实验结果及分析、实验总结、实验心得体会。
实验目的:通过本次实验,学习操作系统文件管理的知识,了解文件系统的概念,并掌握文件管理的基本操作,如新建文件、复制文件、删除文件等;
实验原理:操作系统文件管理是操作系统中一项重要技术,它具有支持用户对文件进行存储、分类、保护和索引等功能。
它的核心功能是通过提供文件系统的结构和管理方法,使用户能够方便地管理文件;
实验步骤:根据实验要求,完成操作系统文件管理实验,并记录实验步骤、实验结果及分析;
实验结果及分析:根据实验结果,对操作系统文件管理实验进行分析,总结出实验中遇到的问题及解决方案;
实验总结:总结本次实验的主要内容,概括出实验的学习结果;
实验心得体会:对本次实验的学习进行反思,总结出实验的感受和收获的经验教训。
操作系统课程实验报告2013~2014年度第1学期院系:学号:姓名:任课教师:成绩评定:实验一题目:文件管理完成日期:年月日1、实验目的了解文件管理的功能和任务,理解文件系统组成和特点,熟悉文件系统的访问和操作。
实验要求用高级语言编写和调试一个简单的模拟文件管理程序。
加深理解有关盘块的分配与回收、目录管理等的具体实施策略。
2.、实验内容模拟一个资源管理器进行文件操作,包括建立和删除目录、建立和删除文件等基本文件操作。
建立相应的数据结构(如:位示图等),模拟盘块管理。
可以参照图6界面进行设计。
3、算法设计1)、定义主面板MainFrame,布局好各个控件,并初始化/** 往node节点下添加一个子节点obj;*/public void addChild(Object obj, DefaultMutableTreeNode node) {if (obj != null && node != null) {DefaultMutableTreeNode temp = new DefaultMutableTreeNode(obj);if (node.getAllowsChildren())node.add(temp);if(!((String) obj).equals("A:\\") && ((String) obj).length() <= 3)// 防止读取A软驱,会出现异常;用于初始用的;addChildren(cmd.listAll((String) obj), temp);}}/** 在node节点下添加数组children;*/public void addChildren(String[] children, DefaultMutableTreeNode node) { if (children != null && node != null) {for (int i = 0; i < children.length; i++) {addChild(children[i], node);}}}/** 对树的节点进行预提取;*/public void addPrefetchChildren(String path, DefaultMutableTreeNode node) { addChildren(cmd.listDirectory(path), node);}/** 对路径路径进行连接;(已经获得了所有的整个路径,需要量转化)*/public String toFilePath(String str) {// 先去掉头尾的[];String pa = str.substring(1, str.length() - 1);String[] temp = pa.split(", ");String path = "";for (int i = 1; i < temp.length; i++) {if (!path.endsWith("\\") && !path.equals(""))// 不为空是为去根节点;path += "\\";path += temp[i];}return path;}public String toPFilePath(String str) {// 先去掉头尾的[];String pa = str.substring(1, str.length() - 1);String[] temp = pa.split(", ");String path = "";for (int i = 1; i < temp.length - 1; i++) {if (!path.endsWith("\\") && !path.equals(""))// 不为空是为去根节点;path += "\\";path += temp[i];}return path;}public class ExpandListener implements TreeWillExpandListener {/** 树展开及收缩监听;*/private MainFrame mainFrame = null;public ExpandListener(MainFrame mainFrame) {this.mainFrame = mainFrame;}public void treeWillExpand(TreeExpansionEvent event) {// 对节点的路径进行转化String path = toFilePath(event.getPath().toString());TreePath treePath = event.getPath();DefaultMutableTreeNode node = (DefaultMutableTreeNode) treePath.getLastPathComponent();// System.out.println("所展开节点的路径:" + path);// System.out.println(treePath);if (node.getDepth() < 2) {Enumeration children = node.children();String filePath = "";while (children.hasMoreElements()) {DefaultMutableTreeNode temp = (DefaultMutableTreeNode) children.nextElement();filePath = "";filePath = path;if (!filePath.endsWith("\\"))filePath += "\\";filePath += temp.toString();// System.out.println("temp=" +filePath);mainFrame.addPrefetchChildren(filePath, temp);}}}2)、添加功能“添加文件(夹)addframe()”、“修改文件(夹)mvframe()”public void addframe() {JFrame addFrame = new JFrame();JLabel jlbl = new JLabel("请输入要添加的文件(夹)名:");addrs = new JLabel("");addrs.setBounds(180, 10, 100, 25);jlbl.setBounds(10, 10, 170, 25);addfile = new JTextField();addfile.setBounds(10, 40, 260, 25);btnaddf = new JButton("添加文件");btnaddd = new JButton("添加文件夹");btnaddf.setBounds(20, 80, 100, 25);btnaddd.setBounds(160, 80, 100, 25);btnaddf.addActionListener(this);btnaddd.addActionListener(this);addFrame.add(jlbl);addFrame.add(addrs);addFrame.add(addfile);addFrame.add(btnaddf);addFrame.add(btnaddd);addFrame.setBounds(400, 350, 300, 150);addFrame.setTitle("添加文件(夹)");addFrame.setLayout(null);addFrame.setVisible(true);}public void mvframe() {JFrame mvFrame = new JFrame();JLabel jlbl = new JLabel("请输入修改后的文件名:");mvrs = new JLabel("");mvrs.setBounds(160, 10, 140, 25);jlbl.setBounds(10, 10, 170, 25);mvfile = new JTextField();mvfile.setBounds(10, 40, 260, 25);btnmvf = new JButton("修改文件名");btnmvd = new JButton(" 修改文件夹名");btnmvf.setBounds(10, 80, 120, 25);btnmvd.setBounds(150, 80, 120, 25);btnmvf.addActionListener(this);btnmvd.addActionListener(this);mvFrame.add(jlbl);mvFrame.add(mvrs);mvFrame.add(mvfile);mvFrame.add(btnmvf);mvFrame.add(btnmvd);mvFrame.setBounds(400, 350, 300, 150);mvFrame.setTitle("修改文件(夹)名");mvFrame.setLayout(null);mvFrame.setVisible(true);}}3)显示文件* 显示系统中的所有盘符;public String[] ListDisks() {File roots[] = File.listRoots();// 根盘符;String disks[] = new String[roots.length];for (int i = 0; i < roots.length; i++) {disks[i] = roots[i].toString();}return disks;}* 获得路径path下的文件;public String[] listAll(String path) {try {File f = new File(path);String[] fileName;String tmp = null;mainFrame.fileshow.setText(null);mainFrame.filestyle.setText(null);if (f.isDirectory()) {fileName = f.list();// System.out.println("共有" + fileName.length + "个文件");for (int i = 0; i < fileName.length; i++) {mainFrame.fileshow.append(fileName[i] + '\n');tmp = path + '\\' + fileName[i];// System.out.println(tmp);if (listDirectory(tmp) != null) {mainFrame.filestyle.append("文件夹\n");} else {mainFrame.filestyle.append("文件\n");}}return fileName;} else if (f.isFile()) {System.out.println("这是一个文件");return null;} else {// System.out.println(path);return null;}} catch (Exception e) {return null;}}public String[] listDirectory(String path) {File f = new File(path);String[] fileName;if (f.isDirectory()) {fileName = f.list();return fileName;} else {// System.out.println(path + "是文件");return null;}}* 进行md操作;md <目录名> 功能: 创建新目录public void md(String directory) {if (!mainFrame.currentPath.equals("")) {String temp = mainFrame.currentPath + "\\" + directory;File newFile = new File(temp);if (!newFile.exists()) {try {if (newFile.isDirectory() == false) {newFile.mkdirs();System.out.println("文件夹创建成功!");} else {System.out.println("文件夹创建出错!");}} catch (Exception e) {System.out.println("出错信息:" + e.getMessage());}} else {System.out.println("文件夹已经存在");}}}* 进行rd操作;rd <目录名> 功能: 删除目录;public void del() {String temp = mainFrame.currentPath;File file = new File(temp);if (file.exists()) {if (file.delete()) {mainFrame.fileshow.setText("文件(夹)删除成功!");} else {mainFrame.fileshow.setText("文件(夹)删除操作出错!");}} else {mainFrame.fileshow.setText("文件(夹)不存在");}}/** 进行edit操作:edit <文件名> 功能: 新建文件*/public void edit(String file) {if (!mainFrame.currentPath.equals("")) {String temp = mainFrame.currentPath + "\\" + file;File newFile = new File(temp);if (newFile.exists()) {mainFrame.addrs.setText("文件已经存在!");System.out.println("文件已经存在!");} else {try {newFile.createNewFile();mainFrame.addrs.setText("文件创建成功!");System.out.println("文件创建成功!");} catch (Exception e) {System.out.println("文件创建失败:" + e.getMessage());}}}}public void mvf(String file){if (!mainFrame.PPath.equals("")) {String temp = mainFrame.PPath + "\\" + file;File newFile = new File(mainFrame.currentPath);if (newFile.exists()) {if(newFile.renameTo(new File(temp))==true){mainFrame.mvrs.setText("修改文件名成功!");}else{mainFrame.mvrs.setText("存在同名文件!");}}}}public void mvd(String dir){if (!mainFrame.PPath.equals("")) {String temp = mainFrame.PPath + "\\" + dir;File newFile = new File(mainFrame.currentPath);if (newFile.exists()) {if(newFile.renameTo(new File(temp))==true){mainFrame.mvrs.setText("修改文件夹名成功!");}else{mainFrame.mvrs.setText("存在同名文件夹!");}}}}}4、运行与测试运行时,弹出主界面双击文件盘C在E盘路径添加文件夹操作系统,再添加文件操作系统如果文件已存在会显示可以更改文件名称删除文件,不过有个BUG,要文件一层层删,才可以删除。