精华内容
下载资源
问答
  • 文件管理概念定义概念:文件是以计算机硬盘为载体存储在计算机上信息集合。组成形式:数据项:数据...属性文件名:一个文件夹文件名称为一,但是不能唯一确定一个文件标识符:标识文件系统里文件的唯一标识符...

    80d0e42d915a8bf8ef323d0ac1c1183a.png

    文件管理

    概念

    定义

    • 概念:文件是以计算机硬盘为载体的存储在计算机上的信息集合。
    • 组成形式:
      • 数据项:数据项是文件最低级的数据组成形式,主要可分为基本数据项(用来描述一个对象的某种属性的一个值)、组合数据项(由多个基本对象组成)。
      • 记录:记录是一组相关的数据项之和。
      • 文件: 文件是创建者所对的一组相关信息的集合。

    属性

    • 文件名:一个文件夹下文件名称为一,但是不能唯一确定一个文件
    • 标识符:标识文件系统里文件的唯一标识符,可以唯一确定文件
    • 类型:文件的分类,比如 .java,.txt文件
    • 位置:指向设备上和设备上文件的指针
    • 大小:文件当前的大小(字节、字或者块表示),可能包含文件最大值
    • 保护:对文件进行保护的访问控制信息,比如:只读、可读可写、拒绝访问等
    • 时间、日期、用户标识符:文件创建、文件修改和上次访问的一些信息,用来保护和跟踪文件使用。

    基本操作

    • 创建文件:create系统调用
      • 系统调用参数:所需要的大小空间、文件存放路径、文件名
      • 系统调用步骤:在外存中找到文件申请的存储空间;系统调用根据文件路径找到该目录对于的目录表,插入目录项
    • 删除文件:delete系统调用
      • 系统调用参数:文件路径、文件名
      • 系统调用步骤:根据文件路径找到目录表;根据文件名找到目录项;回收文件占用磁盘块;删除目录项
    • 读文件:read系统调用
      • 系统调用参数:文件名、读入多少数据;读入数据放在内存什么位置
      • 系统调用步骤:读文件的时候已经打开文件了;所以进程只用提供文件在打开文件表中的索引号即可;操作系统读出进程指定大小的数据存到进程指定的区域
    • 写文件:write系统调用
      • 系统调用参数:文件名、写多少数据、写到什么位置
      • 系统调用步骤:将进程指定文件数据写到指定大小的外存中
    • 打开文件:open系统调用
      • 系统调用参数:文件名、文件路径、打开之后对文件的操作
      • 系统调用步骤:根据路径找到目录表;根据文件名找到目录项;根据目录项检查用户是否有操作权限;有的话操作系统会把文件的目录项复制到“打开文件表”(两种,系统文件表:系统记录所有打开的文件;进程文件表:进程记录自己打开的文件)中;用户根据编号打开文件
    • 关闭文件:close系统调用
      • 系统调用参数:文件路径、文件名
      • 系统调用步骤:将进程打开文件表中相应表项删除;回收分配给该文件的内存空间;系统打开文件表的计数器count-1,如果count=0,页删除表项

    文件管理的逻辑结构

    文件的逻辑结构是从用户的角度出发看到文件的组织形式;文件的物理结构(存储结构)是从实现观点出发看文件在外存上的存储形式。按照逻辑结构可以划分成无结构文件和有结构文件两种。

    无结构文件

    无结构文件又叫做流式文件,将数据桉顺序组织、记录、积累保存,以字节(byte)为单位,是有序信息项的集合。因为没有结构,只能通过穷举搜索的方式查找,查找非常低效率。

    有结构文件

    有结构文件按照记录的组成形式可以分成顺序文件、索引文件、索引顺序文件

    顺序文件

    • 文件记录一个接一个的顺序排列,通常是定长的。顺序排列通常有两种:
    • 串结构:按照记录之间的顺序排列与关键字无关,通常和时间有关。
    • 顺序结构:文件中的记录按照关键字来排序。
    • 特点:在文件中对记录批量修改,顺序文件效率较高,但是增删改查单条记录效率比较低。

    索引文件

    • 索引文件就是建立一张索引表,如果是定长的记录索引表中只需要有索引号(按顺序排列,二分查找)和对应指向逻辑文件的指针,第i条记录的地址就是i*L(L是记录的定长);如果是不定长的记录,索引表会有索引号(按顺序排列,二分查找)、记录长度和执行逻辑地址的指针,第i条记录的地址是钱i-1条记录地址之和+1。
    • 特点:索引表可以提高访问速度,但是每个记录都会对应一个索引表项,如果索引表项比较大的,如果文件为8B,索引表项占32个字节这样对存储空间利用率太低了。

    索引顺序文件

    • 索引顺序文件是指顺序和索引文件二者结合。将文件的所有记录分成若干组,为顺序文件建立一张索引表,在表中为每组的第一条记录建立索引项(该记录的关键字和指向该记录的指针)。查找的时候先根据索引表找到改组,然后在组中顺序查找。
    • 提高了存取速度,减少了索引表的空间

    文件管理的目录结构

    一些概念

    文件控制快(FCB):

    • 概念:是用来存储控制文件需要的各种信息的数据结构,已实现“按名存取”。FCB是一个有序集合称为目录文件,一个FCB就是一个文件目录项。创建一个新的文件,系统会分配一个FCB存放在文件目录中,成为目录项。
    • 组成:
      • 基本信息:比如文件名、文件的物理位置、文件的逻辑结构、文件的物理结构。
      • 存取控制信息:文件存取的权限
      • 使用信息: 文件建立时间、文件修改时间

    索引节点

    • 概念:在检索目录文件的过程中,只用到了文件名,所以可以将文件名与它的描述信息分开,文件的描述信息单独形成一个称为索引节点的数据结构。那么文件的目录结构就是(文件名,索引节点编号)
    • 组成:文件主标识符、文件类型、文件存取权限、文件物理地址、文件长度、文件链接计数(所有指向该文件的文件名计数器)、文件存取时间、索引节点编号、状态、访问次数、逻辑设备号、链接指针(分别指向空闲表和散列表的指针)

    目录结构

    目录的操作主要有:搜索、创建文件、删除文件、显示目录、修改目录

    单级目录

    • 概念:整个文件系统中只有一张目录表,每个文件占领一个目录项。
    • 操作:
      • 搜索:访问一根文件的时候,首先根据文件名在目录表中找到FCB,然后检查合法就访问。
      • 创建:如果建立一个新的文件,首先检索所有的目录检查受否有重名,然后在目录中新增一项,把FCB保存在里面。
    • 特点:查找速度慢、文件不允许重名、不便于文件共享、不适合多用户操作。

    两级目录

    • 概念:将文件目录分成主文件目录和用户文件目录。主文件目录存储用户名和用户目录所在的存储位置;用户文件目录记录该用户的FCB信息。
    • 操作:用户对文件进行操作的时候,只需要搜索用户级目录找到对应的FCB就行了。
    • 特点:解决了多用户操作,但是不利于共享,缺乏灵活性,不能对文件进行分类

    树形目录(多级目录结构)

    • 概念:将两级目录进行推广,就能够实现多级文件目录。
    • 路径:用户操作的时候根据文件路径标识文件,文件路径是一个字符串,目录名和数据文件之间用“/”分开(从根目录开始的路径叫做绝对路径)。
    • 操作:用户对文件进行操作的时候,找到文件的路径就可以找到文件。
    • 特点:可以很方便的对文件进行分类,层次结构清晰,便于文件管理与保护。但是查找文件,需要按照路径名(中间可能有很多文件目录)去寻找,增加了磁盘的访问次数。

    图形目录(无环图目录结构)

    • 概念:在树形结构的基础上增加了一些指向同一个节点的边,让整个目录成为了一个有向无环图。便于文件共享,减少存储空间。
    • 操作:多个用户指向一个共享节点,这个文件会有一个用户计数器,有用户访问的时候计数器+1,当有用户需要删除文件的时候,计数器的值必须为0后才能删除。当文件被修改每个用户看到的信息都是修改后的。
    • 特点:方便了文件的共享,但是让文件管理系统变得更加复杂。

    文件共享

    文件共享就是让多个用户共享使用一个文件,系统中只保存一个文件的副本,不需要每个用户都复制一份。

    基于索引节点的共享方式

    • 思想:让每个用户的文件目录(文件名,索引节点编号指针)索引节点编号指针,指向同一个文件的索引节点,从而读取文件信息。
    • 注意:索引节点里面会有一个计数器,来记录当前访问文件的用户数量;如果此时有连个用户访问,用户A想要删除共享文件,而此时用户B还在使用,用户A只能删除它目录中的关于共享文件的目录项,不能删除共享文件。用户B可以删除索引节点,也就是删除文件。

    利用符号链来实现文件共享

    • 思想:两个用户A、B,如果B想要访问A的中的文件F。系统会创建一个新的文件,新的文件也叫F,并将其写入B的目录下面。新文件F中存储的只是A中文件F的文件路径。其实就是你桌面上的快捷方式。
    • 注意:如果A中的F文件被删除了,B中的F依然存在,但是找不到文件了。用这种方式需要查找多级文件目录,会有很多次磁盘操作。

    共享和复制区别

    注意共享文件与复制文件是不同的,当某一文件被修改的话复制文件另一个文件夹里的数据不会被修改。但是如果共享文件被修改的话,两个文件都会被修改。

    文件保护

    访问类型

    对文件的访问有:读、写、执行、添加、删除、列表清单(列出文件名和文件属性)

    访问控制

    访问控制表法

    • 概念:根据用户的类型控制其对文件访问的操作,文件中一般会增加一个访问控制表(行为操作,列为用户)一般0表示无权限,1表示有权限。
    • 改进:如果一个文件被很多用户访问,那么文件的访问控制表会很长,所以可以对用户进行划分,精简访问控制表用户包括:拥有者(创建文件的用户)、组(具有相同访问的用户)、其他(其他用户)。

    口令法

    • 概念:文件在创建的时候提供一个口令,将口令存入文件的FCB中。用户访问的时候需要输入口令,才可以访问文件。
    • 特点:时间、空间开销小;口令在系统内部不安全。

    密码法

    • 概念:用户对文件进行加密,使用文件的时候必须要相应的密匙来解密。比如异或加密。
    • 特点:保密性强,节约了存储空间;但是编码译码要消耗时间。

    文件系统实现

    层次结构

    操作系统有很多种文件管理,也会有很多种层次结构。 用户调用接口 文件目录系统 存取控制验证模块 逻辑文件系统与文件信息缓冲区 物理文件系统 辅助分配模块 * 设备管理程序模块

    目录实现

    打开文件的时候,操作系统利用路径找到目录项,然后根据目录项找到文件磁盘所需要的信息。最主要的是怎么根据目录项找到文件信息,有以下两种方法

    线性表

    • 概念:最简单的目录实现方法就是线性表法,线性表的每个节点存储文件名和数据块的指针,当创建新的文件的时候首先会搜索目录边查看有没有重名,然后在目录表后面增加一个目录项。
    • 特点:实现简单;但是每次查宅太过于耗时

    哈希表

    • 概念:根据文件名得到一个值,然后返回一个指向线性表的一个指针。
    • 特点:增删改查比较方便,但是为了更快的操作会把当前的目录项复制到内存中,在内存中操作;哈希表的长度固定,哈希函数对表长的依赖性强

    文件实现

    文件分配就是文件数据在物理设备上是如何分布和组织的。主要在两方面文件的分配方式,就是对磁盘非空闲块的管理;文件存储空间,就是对磁盘空闲块的管理

    文件的分配方式

    连续分配

    • 分配方法:要求每个文件在磁盘上占有一组连续的块,磁盘地址是线性排序的。比如一个文件长n块,那么必须在磁盘上划分出n块连续空间存储文件
    • 特点:实现简单、存取速度快;文件大小不能动态增加,并且会产生外部碎片。

    链接分配

    • 链接分配采用的是离散分配方式,对文件的增删改查比较方便,链接分配又分成隐式链接分配和显式链接分配。
    • 隐式链接分配
      • 分配方式:每个文件对应一个磁盘块的链表,文件块在磁盘中以链表的方式链接。添加文件的时候会在目录项中存储指向该文件首地址的指针。写文件的时候,系统会在磁盘中找到空闲块然后将这一块插入到文件里面。
      • 特点:增删改查比较方便,不会产生外部碎片;但是只能顺序访问文件,磁盘块中的指针会消耗空间,稳定性不好,如果指针丢失文件就会被破坏
    • 显式链接分配
      • 分配方式:把链接文件各个物理块的指针制作成一张链接表(文件分配表FAT),FAT是由盘块号和指向下一块的指针构成(盘块号,下一块号),由于盘块号是从0开始的所以可以省略。然后这张表存放在内存中,系统启动就调入内存。
      • 特点:因为表在内存中,提高了查找速度,减少访问磁盘的次数。

    索引分配

    • 分配方式:把每个文件的所有盘块都存储在索引块中,在目录项中存储指向该文件索引块的指针。
    • 特点:没有外部碎片,支持直接访问文件的任意块。
    • 注意:当文件过大的时候索引块可能存储不了一个文件的所有块号,所以索引块很难解决大的文件,但是可以引入以下三种机制解决
    • 链接方案:将多个索引块链接起来
    • 多层索引:第一层索引块存储第二层索引块的信息,第二层索引块存储文件信息,或者更多层。
    • 混合索引:将多钟索引方式混合使用,一个索引块中可以有直接地址、一级索引块的信息、二级索引块的信息。

    访问磁盘次数

    如果一个文件有n个索引块,那么连续分配访问磁盘1次;链接分配访问磁盘n次;m级索引访问m+1次。

    文件存储空间管理

    存储空间的划分与初始化

    • 存储空间的划分:存储空间划分成物理磁盘,比如c、d、e、f盘
    • 存储空间的初始化:将各个磁盘划分成文件区和目录区

    空闲表法

    • 概念:空闲表法是连续的分配方式,他与内存的动态分配方式相似。为文件划分一块连续的空间。系统为外存上的所有空闲区域建立一张空闲盘块表(序号,空闲盘块的第一块号,空闲盘块数)。同样可以使用首次适应,最佳适应等算法。

    空闲链表法

    空闲连表法就是根据构成链表的基本元素不同,分成空闲盘块链和空闲盘区链,对空闲区域进行管理。 空闲盘块链 * 概念:将符合要求的盘块组成一张链表,创建文件的时候,系统从链首开始依次给文件分配块,当回收的时候依次插入到文件的末尾 * 特点:分配与回收简单,没有碎片产生;但是分配空间的时候要产生多次重复的操作。 空闲盘区链 * 概念:将外存上的所有空闲盘区拉成一条链,每个盘区上存储指向下一个盘区的指针,和这个盘区的大小信息。当需要分配的时候会根据文件的大小+算法(一般是首次适应算法)找到合适区域。当回收的时候要注意与相邻的空闲盘区合并 * 特点:可以用作连续分配,也可以离散分配;效率更高,可以一次给一个文件分配一个区域,分配效率高

    位示图法

    • 概念:用0,1分别表示盘块的使用情况,0代表盘块空闲,1代表盘块已分配。磁盘会成为一张位示图。
    • 分配
      • 扫描位示图,找到一个或者一组值为0的二进制位
      • 将找到的这一个二进制位转换成盘块号。设位于第i行第j列,每一行有n块,盘块号为b。如果盘块从0开始编号:b=n•i+j;如果盘块从1开始编号:b=n•(i-1)+j;
      • 修改位示图a[i][j]=1
    • 回收:
      • 将回收的盘块号转换成行和列。设位于第i行第j列,每一行有n块,盘块号为b。如果盘块从0开始编号:i=b÷n,j=b%n;如果盘块从1开始编号:i=(b-1)÷n,j=(b-1)%n
      • 修改位示图a[i][j]=0

    成组链接法

    • 概念
      • 超级块:在文件的目录区中会设置一个专门的磁盘块作为“超级块”,当系统启动的时候就把它调入内存,保证他与外存中的超级快数据一致。
      • 概念:超级快中会记录下一组空闲盘块的数量与盘块号;在每个空闲盘块的第一个空闲盘块会记录下一个空闲盘块的地址信息和盘块数量。
    • 分配:根据指针+分配算法分配,分配之前会将这个空闲盘块的首地址和盘块数等信息存放到超级块中。
    • 回收:假设每个磁盘块又上限,如果前面的那个分组没有满可以直接加入到前面一个分组中,从新更新分组数据信息;如果前面空闲块已经满了,就会新建一个分组将它作为超级快指向的第一块,把超级块中的数据存放到新的分组中,超级块存放新分组的数据。

    磁盘

    磁盘是由表面涂有磁性金属物质的金属或者塑料组成。

    访问时间

    一次磁盘的访问时间是由寻找时间、延迟时间、传输时间所决定的。

    寻道时间

    • 概念:活动头在读写信息前,会将磁头移动到指定的磁道所需要的时间。
    • 计算公式:设活动头需要跨越n个磁道,启动磁臂的时间s,磁盘驱动器运动常数m。T = m•n+s

    延迟时间

    • 概念:磁头定位到某一扇区所需要的时间
    • 计算公式:设磁盘转速为r。T=1/2r

    传输时间

    • 概念:从磁盘读取数据或者向磁盘写入数据的时间
    • 计算公式:读写字节数b,磁盘转速r,一个磁道上的字节数N。T=b/rN

    调度算法

    调度算法是通过对请求访问磁盘进程排序,只能寻道时间。

    先来先服务

    • 概念:根据进程的请求访问磁盘的顺序进行调度,首先请求的最先满足
    • 特点:实现简单,适合于少量的请求,且访问的磁道区域小这种算法性能比较好;但是对于大量的请求,这种算法和随机访问的性能差不多。

    最短寻找时间优先

    • 概念:活动头会选择处理与当前磁道距离最近的磁道。比如当前磁道为50,这时候一个进程请求65,一个进程请求40。那么它将会处理磁道为40的请求。
    • 特点:只能保证每次的寻道时间最短,但是不能保证总的寻道时间最短,且可能会造成饥饿的现象。

    扫描算法

    • 概念:在最短寻找时间优先算法的基础上,扫描算法开始会找一个最近的然后只有磁头移动到最外侧后才会向内侧移动,同时当移动到最内侧的时候才能向外侧移动。
    • 特点:解决了饥饿问题,但是过于浪费时间,如果磁盘从1~100。当最大的请求为80的时候他还是会移动到100,在往回移动。
    • 为了解决过度浪费问题,出现了Look调度算法,磁头只移动到一端最远的那个请求就会返回。

    循环扫描算法

    • 概念:每次都从其实位置开始扫面到最后,然后再快速的返回其实位置。
    • 特点:解决了扫描算法的不公平性,扫描算法在段时间内过于专注处理两边的磁道。但是它同扫描算法一样浪费时间
    • 引入了C-Look调度,每次回从最近的一个请求位置开始,到最远的请求位置结束。

    减少延迟时间

    磁盘是一个连续的自转设备,磁头读/写一个物理块后会

    磁盘的管理

    磁盘初始化

    • 低级格式化(物理分区):磁盘出场的时候只是一块空盘,必须分成扇区,以便磁盘控制器进行读写
    • 逻辑格式化:将磁盘分成多个柱面组成的分区,比如c、d、e盘;操作系统将初始化文件系统数据结构存储到磁盘上,包括空闲空间、已经分配的空间和一个空白目录。

    引导块

    • 背景:磁盘完成格式化后将操作系统的数据写到磁盘中,开机的时候会初始化CPU、初始化内存等。初始化这些硬件会有一个初始化程序(自举程序),会存放在ROM(只读存储器,出厂就写好了)中,但是自举程序可能需要更新但是ROM是不能更改的,所以就出现了引导块来存放初始化程序(自举程序)。ROM中只存放很小的“自举装入程序”(可以引导CPU读取在磁盘的引导块上读取完整的自举程序)。
    • 概念:就是装自举程序的磁盘块,比如C盘

    解决坏块问题

    • 方式1:磁盘会在逻辑格式化中标明哪些磁盘块是坏块,比如标注在FAT(文件分配表中)。
    • 方式2:磁盘控制快回在磁盘内部设立一个坏块链表保存坏块,同时也会有一些备用扇区用来替换坏块。
    展开全文
  • 如何在Linux下查找文件内容包含某个特定字符串的文件怎样在Linux下查找文件内容包含某个特定字符串的文如何在Linux下查找文件内容包含某个特定字符串的文件? 我的目录下面有test1和test2两个文件夹,里面都含有很多...

    如何在Linux下查找文件内容包含某个特定字符串的文件

    怎样在Linux下查找文件内容包含某个特定字符串的文如何在Linux下查找文件内容包含某个特定字符串的文件? 我的目录下面有test1和test2两个文件夹,里面都含有很多文件,其中test2里面还包含一个test文件夹 我想请问的是,如何通过查找关键字test从而找到test1跟test2还有test,并且不显示其他文件 我

    在linux中查找包含某个特定内容的文件

    可通过以下步骤完成从特定内容所在行开始查看文件,若已知特定内容所在行,可忽略步骤1

    通过命令cat filename | grep -n "" 命令打印出要查找的起始行号和结束行号

    使用sed -n 'x,yp' filename 命令 打印出起始行和结束行之间的内容(包括

    例如在/etc下找含有enable的文件 sudo find /etc -name "*" | xargs grep "enable" 结果: .. /etc/yum.repos.d/rpmfusion-nonfree-updates.repo:enabled=1 /etc/yum.repos.d/rpmfusion-nonfree-updates.repo:enabled=0 /etc/yum.repos.d/rp

    linux查找文件中是否含有某个字符串

    。含有某个字符串 Linux查找文件内容的常用命令方法 从文件内容查找匹配指定字符串的行 $ grep "被查找的字符串" 文件名 从文件内容查找与正则表达式匹配的行 $ grep –e “正则表达式” 文件名 查找时不区分大小写: $ grep –i "被查找的字符串"

    在linux中怎么查找包含某个特定内容的文件?

    linux查找文件中是否含有某个字符串?

    linux 怎么查找文件中包含字符串

    如果你想在当前目录下 查找"hello,world。"字符串,可以这样: grep -rn "hello,world。" * * : 表示当前目录所有文件,也可以是某个文件名 -r 是递归查找 -n 是显示行号 -R 查找所有文件包含子目录 -i 忽略大小写 下面是一些有意思的命令行参数: g

    linux查找目录下的所有文件中是否含有某个字符串

    grep -rn "要查找的字符串" * -r 是递归查找 -n 是显示行号 * : 表示当前目录所有文件,也可以是某个文件名。 grep命令的常用格式为:grep [选项] ”模式“ [文件]。 模式部分:

    直接输入要匹配的字符串,这个可以用fgrep(fast grep)代替来提

    Linux如何对文件内容中的关键字进行查找

    如果是用vi打开文件后,在命令行下输入“/关键字” 如果是在没有打开文件的前提就用"cat 文件名 | grep "关键字""

    展开全文
  • 重复的文件(文件的不同副本)自有它们存在的意义,但是如果同一文件大量的重复存在或者被保存成了不同的文件名、保存在了不同的文件夹下面,那将会让我们蛋疼不已。这篇文章向读者展示了怎样在Windows系统使用...

    重复的文件(文件的不同副本)自有它们存在的意义,但是如果同一文件大量的重复存在或者被保存成了不同的文件名、保存在了不同的文件夹下面,那将会让我们蛋疼不已。这篇文章向读者展示了怎样在Windows系统里使用Python程序处理这些文件。

    电脑用户经常会遇到重复文件带来的麻烦。有时候我们不经意间错误地创建了许多相同文件,并且给它们取了不同的文件名,有时候我们把同一个文件复制到了不同的文件夹里面,甚至复制完以后还修改了文件名。由于同一文件有不同的文件名,所以很难通过文件名来查找重复的文件,而且还可能存在文件名相同但是文件内容不相同的情况。为了解决这个问题,我们有了一个新的Python程序。

    在开始之前,我先解释一下这些代码运行的原理——基于文件的完整性( integrity)。如果两个文件的内容相同,不管它们文件名相同与否,它们的MD5值(或者其他哈希算法值)必定是相同的。在这篇文章里,我使用MD5值来判断文件的完整性。首先,我们获得并保存硬盘上所有文件的MD5值。在图1代码流程中,实现了把所有文件的MD5值保存在数据库文件里的功能。

    creat函数接受用户传入的参数,通过get_drive函数遍历所有磁盘驱动器,而后,为每一块磁盘创建一个线程并调用search1函数。search1函数通过调用md5函数为每一个文件生成md5值。这样一来,search1函数就创建了一个字典,在这个字典中,每一个md5值作为一个键,每一个对应文件的路径作为值。最后,creat函数把这个字典保存到文件中。

    让我们来深入探讨一下代码吧!

    创建所有文件哈希值流程图

    程序会使用到下面这些模块。不用担心怎样去生成MD5值,因为我们可以直接使用

    hashlib模块来实现这个功能。

    用md5函数生成每个文件的md5值

    下面的all_duplicate函数输出磁盘上所有的重复的文件,并把输出结果保存在当前目录下的duplicate.txt中。

    get_drives函数获得所有的磁盘驱动器并把结果作为一个列表返回,如果在程序运行的时候新插入了移动存储器或者是其他的外部存储器,这个函数同样可以捕获到并把结果放在列表中。

    Search函数从上面的函数结果中获取磁盘驱动器,并且进入该磁盘读取所有文件,然后把文件的路径传递给md5函数,获得文件的md5值。最后,把所有的md5值和对应的文件路径保存在字典变量dict1中。

    create函数生成所有文件的md5值,它为每一个磁盘创建一个线程来调用create1函数。在每一个线程运行结束之后,create函数把dict1中的值保存在pickle文件mohit.dup1中,如下所示:

    下面函数的作用是打开pickle文件,把里面的字典加载到内存中去。

    创建可执行文件

    生成的可执行文件

    file_search函数用来匹配用户提供的文件的MD5值,该函数首先打开pickle文件并加载字典,当用户提供文件的路径名时,计算文件的MD5值并且和字典里面的键去匹配。

    显示所有选项

    生成包含所有文件的MD5值的pickle文件

    最后我们把写完的代码保存为dupl.py,利用Pyinstaller模块打包成Windows能够执行的exe文件。你也可以直接从Python programming, dupl program, Duplicate file checker下载现成的exe文件。如图2演示的那样运行命令,在成功运行之后,你可以在C:PyInstaller-2.1dupldist路径下面找到dupl.exe,如图3所示。把这个dupl.exe文件放在C盘的Windows文件夹下,如果把它放在其他文件夹里,就需要修改环境变量。

    用下面命令来运行这个程序:

    上面的命令显示所有的选项。

    上面的命令将会创建一个数据库文件mohit.dup1,该文件包含所有文件的MD5值。参数81920定义MD5算法的字节数,你也可以改成别的参数。如果这个参数设置的大,那么在生成MD5时就会占用更多的内存来保证运行速度。如果不设置这个参数,程序就会默认设置为4096字节。

    基于MD5值的重复文件

    成对的显示所有重复的文件

    正如你在图5中所看到的那样,程序花费了12分钟53秒来创建数据库文件。这个时间取决于很多因素,比如内存的大小、电脑的类型、文件的数量和大小等。计算哈希值所用的时间跟文件大小成正相关。生成的数据库文件保存在当前目录。

    学好python你需要一个良好的环境,一个优质的开发交流群,群里都是那种相互帮助的人才是可以的,我有建立一个python学习交流群,在群里我们相互帮助,相互关心,相互分享内容,这样出问题帮助你的人就比较多,群号是301,还有056,最后是051,这样就可以找到大神聚合的群,如果你只愿意别人帮助你,不愿意分享或者帮助别人,那就请不要加了,你把你会的告诉别人这是一种分享。如果你看了觉得还可以的麻烦给我点个赞谢谢

    展开全文
  • 选择好要恢复的文件后,我们就来选择恢复目标的选项,一般我们都是恢复到本地驱动器里的,那么我们点击后面的"浏览"来选择文件保存的目录(选择分区时请注意,保存的分区不能与文件原来所在的分区一样,否则不能保存)...
  • 以文本方式打开*.rc文件查找定位到你对话框处, 把代码拷贝出来,粘贴到新 rc文件里, 然后在resourcr.h文件定义控件ID  UltraEdit Open *.rc 文件。 <br />找到 ID_DIALOG1 ......

    以文本方式打开*.rc文件,查找定位到你的对话框处,

    把代码拷贝出来,粘贴到新的 rc文件里,

    然后在resourcr.h文件定义控件的ID

     UltraEdit Open *.rc 文件。

    找到 ID_DIALOG1 ... 从 BEGIN 拷贝到 END

    在resource view中选中欲拷贝的Dialog,ctrl+c
    然后打开另外的工程,在资源里选种Dialog文件夹,ctrl+v

                                                              —————仅拷贝对话框

    1.在工程A中,在classview中,选择对话框类,使用右健菜单中的Add to Gallery
    2.到工程B中,按照添加外部控件的方法,添加从A导出的对话框类:
    菜单:Project->Add to Project ->Components and Control
    会弹出一个选择文件的对话框,会有工程A名字的目录,进入,选择,添加

    展开全文
  • 9.我们最好先在工程文件夹里新建一个文件夹,如images,然后将需要图标 文件放到其中。 10.在Qt Creator menu.qrc 文件中,我们点击Add 下拉框,选择Add Prefix。 我们可以将生成/new/prefix 前缀改为其他名字...
  • 那么怎样用代码实现查找一个文件夹里面最新测试报告呢? 测试报告放在一个文件夹test_report,在test_report文件夹同级新建一个python文件,代码如下: import os report_dir = './test_report'
  • 非root用户安装软件

    2017-06-06 10:04:21
    大致流程为:在当前用户path路径文件夹查找名为ls可执行文件名,如果找到,则执行ls文件;如果找不到,则提示未安装或者找不到。这里很重要就是path路径内容,如果没有指定路径,则会在path路径寻找。...
  • 高效管理工具推荐

    2014-08-18 21:50:08
    即便你之前对文件夹结构、功能及扩展做了怎样“完美”规划,现在,一切文件又变得乱糟糟了。这个时候,神器Everything出现了。 如其名,Everything目标就是帮你找到Everything in your disk。支持通配符、...
  • 18、清除预读文件:Windows XP的预读设置虽然可以提高系统速度,但是使用一段时间后,预读文件夹里的文件数量会变得相当庞大,导致系统搜索花费的时间变长。而且有些应用程序会产生死链接文件,更加重了系统搜索的...
  • 用于将不同类型的文件“load”或“import”并转换成浏览器可以识别的类型,如js、Stylesheet等。更高级的模块加载器甚至可以支持使用ES6里边的“require”或“import”引入模块。 例如,你可以使用...
  • 相信大家基本上每天都要登陆小企鹅吧…那个看了N年的小企鹅…我们对它又爱又恨,看了那么久,我们可不可以改变它的样子呢?...我在网上查找过,最后知道是在一个Res.rdb的文件里面,QQ2010正式版以前是直接
  • 实例186 移动正在使用的文件 268 实例187 批量复制文件 269 6.6 指定类型的文件操作 270 实例188 文本文件的操作 270 实例189 简单的文件加密解密 271 6.7 其他 273 实例190 获取窗口文本 273 实例191...
  • 2、本软件作者不是低能儿,抓肉鸡无须在自已劳动成果放马害自已。 3、本软件生成服务端运行只有一个EXE程序,不释放其它可执行程序; 4、本软件不提供专用上线,所以作者在用户使用后无法控制用户肉鸡; ...
  • 如何判定驱动器的文件系统类型 如何获得磁盘空间信息 如何判定磁盘是光驱还是软驱 如何确定应用程序的路径 应该在哪儿创建临时文件 如何对INI文件进行读写 如何遍历目录下的每一个文件 如何将内容不为空的目录删除 ...
  • 服务端不但能插入IE进程穿防火墙,又可选随意插系统目录的文件; 屏幕高速传输,CPU只占用10-30%,网络传输最高达到每秒20帧; 服务,注册表,进程,CMD管理完全模似操作系统,象操作自已的电脑一样; 超级记录有数据包...
  •  Filemon 是一款出色的文件系统监视软件,它可以监视应用程序进行的文件读写操作。它将所有与文件一切相关操作(如读取、修改、出错信息等)全部记录下来以供用户参考,并允许用户对记录的信息进行保存、过滤、查找等...
  • 3xdoing留言本 v2.0.0.rar

    2019-07-07 21:50:50
    还有就是怎样取消入口文件,如果不取消入口文件那样可以让人一眼就看出是php编写的文件,如果服务器支持,我们可以在根目录中建立一个.htaccess文件里面的写法为   RewriteEngine On   RewriteCond %{REQUEST_...
  • 3xdoing留言本 2.0.zip

    2019-05-27 11:55:39
    还有就是怎样取消入口文件,如果不取消入口文件那样可以让人一眼就看出是php编写的文件,如果服务器支持,我们可以在根目录中建立一个.htaccess文件里面的写法为 RewriteEngine On RewriteCond %{REQUEST_...
  • 实例184 移动正在使用的文件 236 实例185 批量复制文件 237 实例186 文件复制过程中显示进度条 238 5.6 指定类型的文件操作 239 实例187 对INI文件进行操作 239 实例188 文本文件的操作 241 实例189 在...
  • 本书是在《Visual C++ 6.0编程高手》基础上新推出2000版,编者在1年多时间收集、整理、加工、调试了大量visual C++实用程序,并汇集成书。本书共计36章206个程序。这些程序覆盖了Visual C++编程主要...
  • 程序开发范例宝典>>

    2012-10-24 10:41:28
    实例057 在RichTextBox控件中显示RTF格式的文件 66 实例058 为RichTextBox控件添加自定义滚动条 68 实例059 在RichTextBox控件中实现关键字描红 69 实例060 在RichTextBox控件中实现项目编号功能 71 ...
  • 你可以到我公司的主页上(网址:http:\\www.grasp.com.cn)去下载最新的版本,然后对你的计算机里的老版本《管家婆》做一个升级安装即可(关于如何“解压下载后的文件”及“升级安装的方法”可以参看主页上“软件...
  • 实例057 在RichTextBox控件中显示RTF格式的文件 66 实例058 为RichTextBox控件添加自定义滚动条 68 实例059 在RichTextBox控件中实现关键字描红 69 实例060 在RichTextBox控件中实现项目编号功能 71 实例061...
  • 实例057 在RichTextBox控件中显示RTF格式的文件 66 实例058 为RichTextBox控件添加自定义滚动条 68 实例059 在RichTextBox控件中实现关键字描红 69 实例060 在RichTextBox控件中实现项目编号功能 71 实例061...
  • 实例057 在RichTextBox控件中显示RTF格式的文件 66 实例058 为RichTextBox控件添加自定义滚动条 68 实例059 在RichTextBox控件中实现关键字描红 69 实例060 在RichTextBox控件中实现项目编号功能 71 实例061...
  • 实例057 在RichTextBox控件中显示RTF格式的文件 66 实例058 为RichTextBox控件添加自定义滚动条 68 实例059 在RichTextBox控件中实现关键字描红 69 实例060 在RichTextBox控件中实现项目编号功能 71 实例061 设置...
  • Ghost 8.3 系统备份软件

    2009-11-13 10:29:50
    首先选择打开一个备份文件(File/Open),这时备份中的文件就像资源管理器一样在程序界面窗口中列出,可以在其中非常方便地查看、打开文件,也可以查找文件,或者将某个文件删除(但不能删除目录)。 在 Ghost Explorer...
  • Ghost 8.3 Enterprise

    2009-04-15 13:32:08
    首先选择打开一个备份文件(File/Open),这时备份中的文件就像资源管理器一样在程序界面窗口中列出,可以在其中非常方便地查看、打开文件,也可以查找文件,或者将某个文件删除(但不能删除目录)。  在 Ghost ...
  • C#程序开发范例宝典(第2版).part02

    热门讨论 2012-11-12 07:55:11
    实例057 在RichTextBox控件中显示RTF格式的文件 66 实例058 为RichTextBox控件添加自定义滚动条 68 实例059 在RichTextBox控件中实现关键字描红 69 实例060 在RichTextBox控件中实现项目编号功能 71 实例061 ...

空空如也

空空如也

1 2 3 4
收藏数 62
精华内容 24
关键字:

怎样查找文件夹里的文件