`
condeywadl
  • 浏览: 78258 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

C/C++ 如何实现文件在FAT32文件系统中的绝对定位

阅读更多

 关于文件在FAT32磁盘扇区中的绝对定位 首先我们应该了解FAT32的基本结构(树形结构) 我们首先要明白

FAT32文件系统DBR(引导扇区),FAT,FDT,DATA这四个基本结构:

   1.DBR:DBR记录了当前FAT32 磁盘的一些基本信息,在通常情况下,DBR位于磁盘分区的0号逻辑扇区 在附件中有幅

      DBR的图形信息,里面详细说明了在DBR中我们能获取到哪些主要信息,当然,还有很多信息希望读者自己去查阅详

      相关资料,我们首先需要获取到DBR中的一些详细信息才能进一步定位文件。

   2 FDT:FDT区简单的说就是记录的目录(文件夹)的信息,里面记录了当前目录下所有的文件(包括当前目录下的文件

      夹名)的信息,说通俗一点就是记录了当前目录下的所有文件的文件名,我们定位文件,必须要定位到该文件所在目

      录的FDT区的位置。

   3 FAT:FAT区在FAT32文件系统中有2个:FAT1与FAT2,FAT2是FAT1的备份,所以我们只需要获取FAT1的位置,FAT区

      所在的扇区号我们可以由DBR获取,那FAT区究竟是什么呢?首先,我们知道磁盘是由扇区组成的,若干的扇区组成一

      簇,当一个目录的FDT区需要占据多个簇的时候,FAT区记录了多个簇的连接信息,具体可以详细去查阅有关资料。

   4 DATA:DATA区是由FDT区定位的,上面说过FDT区记录了某个目录下文件的信息,若这个信息记录的是文件而非文件

      夹(目录),则这个信息的一部分记录了这个文件的DATA区的位置,顾名思义,DATA区储存了文件的内容,当一个

      簇无法记录一个完整的文件内容时,就要用到FAT区进行簇连。

 

 

 下面我将详细介绍如何用C/C++实现指定文件在FAT32文件系统中的绝对定位:

 定位文件所在的DATA区,必须读取扇区。C/C++中 我们使用windows.h提供的CreateFile,CreateFile2个函数实现

 读取扇区,函数的使用方法请查阅详相关资料。

 下面我们举个例子 假设我要定位 C:\a\b\c.txt 这个文件

 1.读取0号扇区DBR,获取详关信息,具体我们需要得到:1根目录FDT区的首簇号 2每簇所拥有的扇区数 3FAT区的首扇区号

    4保留扇区号 5FAT区的长度 6FAT区数

 2.我们获取了根目录FDT区的首簇号,根据公式:首扇区号=保留扇区+FAT区数*AT区的长度+(当前簇号-2)*每簇所拥

    有的扇区数 这个公式 计算出首扇区 根据上面FDT区的介绍 我们知道根目录的FDT区一定记录了a这个目录的信息,那

    我们逐个扇区读取并扫描(注意簇连)获得了b这个目录的目录信息,然后分析信息,得到b这个目录的FDT区。

 3.同上,在b的FDT区中,我们获取了c.txt这个文件的信息,并由获取的信息得到了这个文件DATA区的扇区号,从而定位

    成功。

 

FAT32文件系统就是一个树型结构 在定位文件中我们要注意:1.簇连问题

                                                                                 2.长文件名可能记录在2个扇区中,定位起来有点难度

                                                                                 3.中文编码问题

 

如何读者有什么疑问,请给我留言,一定回答。

  • 大小: 32.5 KB
1
0
分享到:
评论
2 楼 condeywadl 2009-07-17  
恩 可以 这是数据结构的问题 我可以公布code给你参考 给你QQ 412163774
1 楼 xfei6868 2009-07-17  
能写出一个关于任意文件读出其占用簇地址
或者是首地址吗?
最近看了这么多关于fat32的东西好像有些思路,但是感觉好像很麻烦啊!

相关推荐

    MATLAB模糊控制器(*.fis)C/C++接口文件

    * 这是修改过后的fis.c模糊推理系统库函数,可以移植C/C++环境使用,在VS2010的MFC环境经过测试 * 1、将fis.c文件拷贝到项目中; * 2、修改VS2010的配置属性,项目->属性->C/C++->预处理器->预处理器定义,添加 ...

    用C/C++实现代码的动态修改(SMC)

    由于该技术需要直接读写对内存中的机器码,所以多采用汇编语言实现,这使得很多想在自己的程序中使用SMC技术进行软件加密的C/C++程序员望而却步。针对这种现状,本文提出了几种基于C/C++语言的机器指令定位方法,...

    基于C/C++模拟处理机调度、存储管理(动态分区分配、分页存储地址转换)和文件系统.zip

    基于C/C++模拟处理机调度、存储管理(动态分区分配、分页存储地址转换)和文件系统 基于C/C++模拟处理机调度、存储管理(动态分区分配、分页存储地址转换)和文件系统 基于C/C++模拟处理机调度、存储管理...

    C/C++实现linux和Windows查看系统、进程、服务的内存和CPU使用

    C/C++实现linux和Windows查看系统、进程、服务的内存和CPU使用情况的源代码,生成的是静态链接库,Windows和Linux下经测试都可用,查看系统、指定名称的服务、指定名称的进程占用CPU和内存,查看方式不是通过程序中...

    VC++读写FAT32操作

    在IT领域,尤其是在系统编程和低级磁盘操作中,理解如何使用VC++对FAT32文件系统进行读写是非常关键的技能。FAT32是Microsoft开发的一种文件分配表(File Allocation Table)格式,广泛应用于各种存储设备,如硬盘、...

    Qt和C/C++实现的可视化景点旅游信息系统——包含详细注释与txt说明文件

    1. 熟悉 C/C++ 的人员 2. 正在做关于 Qt 可视化却无从下手的人员 3. 希望做一个小项目,但没有合适的框架的人员 我主要能学到什么: 1. 该项目包含 鼠标点击响应与绘图相关的算法 2. 该项目包含 创建、删除、编辑 ...

    C/C++程序设计学习与实验系统

    在学C的时候碰到了麻烦,TurboC的.h文件好多VC没有,就上网找了一个这个工具。用这个来学习C参加二级考试挺实用的,是共享版,35块,比考试报名费便宜多了,不贵。机器码注册。官方介绍:原名《Turbo C/C++ for ...

    c/c++实现的基于文件的RSA加解密

    通过这个项目,你可以学习到如何在C/C++环境中实现RSA算法,以及如何将它应用于文件的加解密操作。这对于理解非对称加密原理和提高信息安全编程能力非常有帮助。同时,这也是一个基础的密码学实践,有助于进一步研究...

    c/c++中文帮助文档(API)

    C/C++是两种广泛使用的编程语言,特别是在系统级编程、游戏开发和高性能计算等领域。C++是C语言的扩展,引入了面向对象编程的概念。在编程过程中,理解并有效地使用库函数是至关重要的,因为它们提供了标准功能,...

    MATLAB Support for MinGW-w64 C/C++/Fortran Compiler

    总之,这个MATLAB支持包使得用户能够使用MinGW-w64编译器在MATLAB环境中编写C、C++和Fortran代码,同时与TrueTime 2.0工具箱配合,实现对实时系统行为的模拟和分析。通过这个包,开发者可以充分利用编译型语言的性能...

    删除文件恢复C++实现

    本文将深入探讨如何使用C++在Windows操作系统下实现对NTFS(New Technology File System)和FAT32(File Allocation Table 32)文件系统中删除文件的恢复。 首先,我们需要了解文件在被删除后的情况。在Windows系统...

    c / c++ / cpp / stl 中文帮助文档手册chm格式下载

    c / c++ / cpp / stl 中文帮助文档手册chm格式下载 C/C++ 语言参考 基本C/C++ 预处理命令 操作符优先级 转义字符 ASCII码表 基本数据类型 关键字 标准 C 库: Standard C I/O Standard C String...

    C/C++中文文档(支持C++20和C18)和蓝桥杯C/C++组用的文档

    这个文档压缩包包含普通C/C++中文文档和蓝桥杯比赛时用的文档,C/C++中文文档是最新版,支持到C++20和C18,且包含以前版本的内容。蓝桥杯蓝桥杯C/C++组用的文档比正常文档更简略,但包含了ASCII码表。

    文件系统C++实现

    在C++中实现文件系统,开发者需要理解文件I/O操作、目录结构和文件权限等基本概念。C++标准库提供了一系列的文件操作函数,如fstream库,用于读写文件,以及dirent库,用于处理目录操作。 在这个模拟器中,文件被...

    C/C++ API 帮助文档大全(中文,chm格式)

    C++是一种强大的、通用的编程语言,它在C语言的基础上增加了面向对象的特性,同时也支持泛型编程和底层系统级编程。C++ API通常包括标准库(如STL,Standard Template Library)、Boost库和其他第三方库提供的接口。...

    JAVA调用C/C++ DLL文件方法

    在 C/C++ 中,需要把 JAVA 中 JNI 的系统函数放到 VC 中,例如,在 JDK 中我的 JDK 装在 C 盘路径是”C:\Program Files\Java\jdk1.5.0_01\include”,把 include 下所有 .h 文件和 include\win32 下的 .h 文件复制到...

    c语言/c++信息管理系统 考勤管理系统

    《C语言/C++信息管理系统——考勤管理系统》 在信息技术高度发达的今天,信息管理系统已经广泛应用于各行各业,其中考勤管理系统作为企业管理中的重要一环,能够有效地帮助企业进行员工出勤情况的跟踪与管理。本...

    keil C/C++ 界面配置文件

    根据sublime text3 界面为模板,配置keil界面。 使用方法: 下载文件,进入keil安装目录,使用下载的文件替换安装目录中的global.prop,然后就可以正常使用的

    C/C++语言文件逆向

    在这个项目中,C/C++被用来实现文件的逆向转换,这需要深入理解语言特性,如指针操作、内存管理以及文件I/O。 2. **文件操作**:在C/C++中,文件操作通过标准库中的`<fstream>`头文件实现。逆向转换可能包括读取...

    C/C++仿真实现Linux文件系统

    在本项目中,"C/C++仿真实现Linux文件系统"是一个旨在理解和模拟Linux操作系统核心功能的实践项目,特别是关注于文件系统相关的部分。通过这个项目,开发者可以深入理解文件系统的内部工作原理,包括文件的创建、...

Global site tag (gtag.js) - Google Analytics