python--文件管理系统

news2024/9/22 19:46:00

文件系统管理项目说明文档

项目说明

  • 基本任务

    • 在内存中开辟一个空间作为文件存储器,在其上实现一个简单的文件系统
    • 退出这个文件系统时,需要该文件系统的内容保存到磁盘上,以便下次可以将其回复到内存中来
  • 具体要求

    • 文件存储空间管理可采取链接结构(如FAT文件系统中的显式链接等)或者其他学过的方法
    • 空闲空间管理可采用位图或者其他方法
    • 文件目录采用多级目录结构,目录项目中应包含:文件名、物理地址、长度等信息
    • 需提供格式化,创建子目录,删除子目录,显示目录,更改当前目录,创建文件,打开文件,关闭文件,写文件,读文件,删除文件等操作

功能实现

各部分组件说明

  • 顶部菜单栏,提供了所有文件操作,包括格式化,保存,增加/删除/重命名和关于,教程

    在这里插入图片描述

  • 上方地址栏显示当前选中文件/文件夹绝对路径

在这里插入图片描述

  • 左侧文件目录,以树状结构展示文件架构

    在这里插入图片描述

  • 右侧文本编辑框,实时显示选中文件的内容,修改后点击下方SAVE按钮可保存

在这里插入图片描述

  • 下方脚注显示当前选中文件/文件夹的信息

在这里插入图片描述

  • 右键显示菜单

在这里插入图片描述

实现原理

  1. 构建一个FileSystem类(见file_system_components.py,可以模拟文件系统的各种操作,其中:

    • 文件块用FCB类表示,存储其名称、长度、创建时间、修改时间
    • 磁盘存储用Disk类表示
    • 文件组织方式采用链接方式中的FAT方法。代码中构建了一个FAT类,以存储文件的链表存储结构。
    • 空闲区间用位图存储,以FreeSpace类表示
    • 多级目录用FileTree表示,其中:
      • FileTreeNode为多级目录中的文件夹结点
      • 多级目录中的文件结点直接为FCB,且一定为叶节点
  2. 增加文件时,增加FCB块,并加入到FileTree中;写入时,额外写入到磁盘Disk中,同时将FreeSpace中对应位置赋值0:

    cur_index = FAT_END
    
    while data != "":
        next_index = self.find_free_index()
        if next_index == -1:
            raise AssertionError("don't have enough space!!")
            if cur_index == FAT_END:
                fcb.start_address = next_index
                else:
                    self.fat.table[cur_index] = next_index
    
                    self.disk[next_index] = data[:BLOCK_SIZE]
                    data = data[BLOCK_SIZE:]
                    self.free_space.bitmap[next_index] = SPACE_OCCUPY
    
                    cur_index = next_index
                    self.fat.table[cur_index] = FAT_END
    

    删除文件同理:

    cursor = fcb.start_address
    if cursor is not None:
        while cursor != FAT_END:
            self.disk[cursor] = ""
            self.free_space.bitmap[cursor] = SPACE_FREE
    
            next_position = self.fat.table[cursor]
            self.fat.table[cursor] = SPACE_FREE
    
            cursor = next_position
    
  3. 构建对应的UI,并用PyQt中的QTreeView模拟左侧的树结构,每次操作后更新QTreeView中的model

运行方法

  • 直接运行
    已经通过pyinstaller生成了Windows上的可执行文件。
    在Windows系统上点击file_system_main.exe,即可运行程序

  • 编译运行

    • Python version:3.8

    • 安装PyQt5和qt-material(用来应用本程序所需的UI样式)和bitarray(用位图表示剩余空间)

      pip install PyQt5
      pip install qt-material
      pip install bitarray
      
    • 运行源码

      python file_system_main.py
      

运行截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

项目总结

项目亮点

  • 采用PyQt5进行图形化开发,并应用qt-material,增加较多图标,较为美观
  • 提供了菜单栏工具和右键选择菜单两种操作方式

改进方向

  • 未来可以尝试采用别的文件管理策略

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/931616.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WPF基础入门-Class5-WPF命令

WPF基础入门 Class5-WPF命令 1、xaml编写一个button&#xff0c;Command绑定一个命令 <Grid><ButtonWidth"100"Height"40" Command"{Binding ShowCommand}"></Button> </Grid>2、编写一个model.cs namespace WPF_Le…

机械臂手眼标定ZED相机——眼在手外python、matlab

目录 1.眼在手外原理 2.附上眼在手外求得手眼矩阵的python代码 3.眼在手外标定步骤 1&#xff09;打印棋盘格 2&#xff09;得到hand数据 3&#xff09;得到camera数据 4.运行python得到手眼矩阵 1.眼在手外原理 眼在手外所求的手眼矩阵是基坐标到相机的转换矩阵 2.附上…

软件设计师学习笔记6-存储系统

1.层次化存储体系 1.1层次化存储结构 局部性原理是层次化存储结构的支持 时空局部性&#xff1a;刚被访问的内容&#xff0c;立即又被访问(eg: 循环体 ) 空间局部性&#xff1a;刚被访问的内容&#xff0c;临近的空间很快被访问(eg:数组) 1.2层次化存储结构的分类 DRAM&…

基于Tkinter的PanedWindow组件进行窗口布局

在用Tkinter进行可视化界面开发中&#xff0c;界面布局是最需要最先考虑的&#xff0c;哪些组件放在什么地方都需要优先规划&#xff0c;我们可以用place或者pack进行边开发边布局&#xff0c;这需要人为的去对齐&#xff0c;费时费力。在Tkinter中有个组件PanedWindow可以帮助…

手把手教你搭建一个盲盒小程序,轻松掌握开发技巧

在当今社交媒体时代&#xff0c;微信公众号已成为企业、个人传播和推广的重要工具。而微信公众号盲盒小程序则是一个更为创新和互动的方式&#xff0c;能够吸引更多用户的关注和参与。下面&#xff0c;我们将为大家介绍一下微信公众号盲盒小程序的制作完全攻略。 1. 注册登录【…

区分什么是Java内存模型(JMM)和 JVM运行时数据区

文章目录 一、概念区分1、什么是内存模型&#xff1f;什么是&#xff08;内存区域&#xff09;运行时数据区&#xff1f;2、为什么要有Java内存模型&#xff1f;2.1、硬件的效率与一致性2.2、 CPU和缓存的一致性2.2.1、为什么需要CPU cache&#xff1f;2.2.2、三级缓存&#xf…

ASEMI快恢复二极管APT80DQ60BG特点应用

编辑-Z APT80DQ60BG参数描述&#xff1a; 型号&#xff1a;APT80DQ60BG 最大峰值反向电压(VRRM)&#xff1a;600V 最大直流阻断电压VR(DC)&#xff1a;600V 平均整流正向电流(IF)&#xff1a;80A 非重复峰值浪涌电流(IFSM)&#xff1a;600A 工作接点温度和储存温度(TJ, …

基于社会群体算法优化的BP神经网络(预测应用) - 附代码

基于社会群体算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于社会群体算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.社会群体优化BP神经网络2.1 BP神经网络参数设置2.2 社会群体算法应用 4.测试结果&#xff1a;5…

C#_特性反射详解

特性是什么&#xff1f; 为程序元素额外添加声明信息的一种方式。 字面理解&#xff1a;相当于把额外信息写在干胶标签上&#xff0c;然后将其贴在程序集上。 反射是什么&#xff1f; 反射是一种能力&#xff0c;运行时获取程序集中的元数据。 字面理解&#xff1a;程序运行…

入门必看!亚马逊新品上架如何快速提升产品排名?

对于有经验的亚马逊卖家来说&#xff0c;各种套路已经玩的出神入化&#xff0c;但对于新手卖家来说&#xff0c;可能并不清楚亚马逊新品上架时应该去冲产品排名&#xff0c;更不知道怎么提升产品排名。所以今天&#xff0c;大白就为亚马逊新手卖家带来了亚马逊新品上架该如何提…

VR/AR/眼镜投屏充电方案(LDR6020)

VR眼镜即VR头显&#xff0c;也称虚拟现实头戴式显示设备&#xff0c;随着元宇宙概念的传播&#xff0c;VR眼镜的热度一直只增不减&#xff0c;但是头戴设备的续航一直被人诟病&#xff0c;如果增大电池就会让头显变得笨重影响体验&#xff0c;所以目前最佳的解决方案还是使用VR…

富士施乐S1810 放大或缩小复印方法

1、放置原稿 将原稿放置在稿台玻璃上。&#xff08;A3纸横向平铺&#xff09; 2、设置原稿尺寸 按下“原稿尺寸”键&#xff0c;将显示区调整为横向A3&#xff0c;如图&#xff1a; &#xff08;请务必确认是否与外观图的原稿尺寸显示区所显示的原稿尺寸和方向匹配。&#xf…

直播小程序源码有用的协议知识:MQTT协议

MQTT协议分析&#xff1a; MQTT协议中文全称为消息队列遥测传输协议&#xff0c;是一种实时通信协议&#xff0c;适用于物联网场景中。MQTT协议被应用到直播小程序源码平台中&#xff0c;确保了直播小程序源码平台音视频流的传输高效、低延迟&#xff0c;为直播小程序源码平台…

Springboot_Redis

Springboot默认使用lettuce操作redis,底层是netty jdeis并发差些 Redis的Template 分为两种, 一种是StringRedisTemplate&#xff0c;另一种是RedisTemplate 根据不同的数据类型&#xff0c;大致的操作也分为这5种&#xff0c;以StringRedisTemplate为例 stringRedisTempla…

Linux 终端命令之文件目录操作,对比Dos相关命令

目录 前言 基础命令&#xff08;文件目录相关的&#xff09; cd命令 【英文帮助】 【对应Dos命令】 pwd命令 【英文帮助】 【对应Dos命令】 ls命令 【英文帮助】 【对应Dos命令】 tree命令 【英文帮助】 【对应Dos命令】 mkdir命令 【英文帮助】 【对应Dos命令…

Linux下的Shell基础——文本处理工具(五)

前言&#xff1a; Linux Shell是一种基本功&#xff0c;由于怪异的语法加之较差的可读性&#xff0c;通常被Python等脚本代替。既然是基本功&#xff0c;那就需要掌握&#xff0c;毕竟学习Shell脚本的过程中&#xff0c;还是能了解到很多Linux系统的内容。 Linux脚本大师不是…

Android View动画之LayoutAnimation的使用

接前篇 Android View动画整理 &#xff0c;本篇介绍 LayoutAnimation 的使用。 参考《安卓开发艺术探索》。 View 动画作用于 View 。 LayoutAnimation 则作用于 ViewGroup &#xff0c; 为 ViewGoup 指定一个动画&#xff0c;ViewGoup 的子 View 出场时就具体动画效果。 简言…

YOLO目标检测——真实和人工智能生成的合成图像数据集下载分享

YOLO真实和人工智能生成的合成图像数据集&#xff0c;真实场景的高质量图片数据&#xff0c;图片格式为jpg&#xff0c;数据场景丰富。可用于检测图像是真实的还是由人工智能生成。 数据集点击下载&#xff1a;YOLO真实和人工智能生成的合成图像数据集120000图片数据说明.rar

【MYSQL8.0从入门到精通】

文章目录 MySQL 8.0一.MySQL的多表操作1.外键约束&#xff08;一对多&#xff09;2.外键约束&#xff08;多对多&#xff09; MySQL 8.0 一.MySQL的多表操作 1.外键约束&#xff08;一对多&#xff09; 方式1 在创建表的同时创建外键约束 -- 1.创建主表 create table if no…

聚类分析 | MATLAB实现基于LP拉普拉斯映射的聚类可视化

聚类分析 | MATLAB实现基于LP拉普拉斯映射的聚类可视化 目录 聚类分析 | MATLAB实现基于LP拉普拉斯映射的聚类可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 聚类分析 | MATLAB实现基于LP拉普拉斯映射的聚类可视化&#xff0c;聚类结果可视化&#xff0c;MATLAB程…