关于文件在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
分享到:
相关推荐
本篇文章将深入探讨如何在C/C++语言环境中,不依赖Windows API来实现对FAT文件系统的读写操作。 首先,理解FAT文件系统的核心组成部分至关重要。这包括主引导记录(MBR)、扇区、簇、FAT表、根目录以及数据区域。...
在IT领域,尤其是在系统编程和低级磁盘操作中,理解如何使用VC++对FAT32文件系统进行读写是非常关键的技能。FAT32是Microsoft开发的一种文件分配表(File Allocation Table)格式,广泛应用于各种存储设备,如硬盘、...
* 这是修改过后的fis.c模糊推理系统库函数,可以移植C/C++环境使用,在VS2010的MFC环境经过测试 * 1、将fis.c文件拷贝到项目中; * 2、修改VS2010的配置属性,项目->属性->C/C++->预处理器->预处理器定义,添加 ...
用C编写的一个Unix/Linux文件系统
由于该技术需要直接读写对内存中的机器码,所以多采用汇编语言实现,这使得很多想在自己的程序中使用SMC技术进行软件加密的C/C++程序员望而却步。针对这种现状,本文提出了几种基于C/C++语言的机器指令定位方法,...
基于C/C++模拟处理机调度、存储管理(动态分区分配、分页存储地址转换)和文件系统 基于C/C++模拟处理机调度、存储管理(动态分区分配、分页存储地址转换)和文件系统 基于C/C++模拟处理机调度、存储管理...
C/C++实现linux和Windows查看系统、进程、服务的内存和CPU使用情况的源代码,生成的是静态链接库,Windows和Linux下经测试都可用,查看系统、指定名称的服务、指定名称的进程占用CPU和内存,查看方式不是通过程序中...
1. 熟悉 C/C++ 的人员 2. 正在做关于 Qt 可视化却无从下手的人员 3. 希望做一个小项目,但没有合适的框架的人员 我主要能学到什么: 1. 该项目包含 鼠标点击响应与绘图相关的算法 2. 该项目包含 创建、删除、编辑 ...
在学C的时候碰到了麻烦,TurboC的.h文件好多VC没有,就上网找了一个这个工具。用这个来学习C参加二级考试挺实用的,是共享版,35块,比考试报名费便宜多了,不贵。机器码注册。官方介绍:原名《Turbo C/C++ for ...
通过这个项目,你可以学习到如何在C/C++环境中实现RSA算法,以及如何将它应用于文件的加解密操作。这对于理解非对称加密原理和提高信息安全编程能力非常有帮助。同时,这也是一个基础的密码学实践,有助于进一步研究...
总之,这个MATLAB支持包使得用户能够使用MinGW-w64编译器在MATLAB环境中编写C、C++和Fortran代码,同时与TrueTime 2.0工具箱配合,实现对实时系统行为的模拟和分析。通过这个包,开发者可以充分利用编译型语言的性能...
C/C++是两种广泛使用的编程语言,特别是在系统级编程、游戏开发和高性能计算等领域。C++是C语言的扩展,引入了面向对象编程的概念。在编程过程中,理解并有效地使用库函数是至关重要的,因为它们提供了标准功能,...
本文将深入探讨如何使用C++在Windows操作系统下实现对NTFS(New Technology File System)和FAT32(File Allocation Table 32)文件系统中删除文件的恢复。 首先,我们需要了解文件在被删除后的情况。在Windows系统...
有关状态机设计方面的书籍,我这里隆重推荐一本:《Practical Statecharts in C/C++ Quantum Programming for Embedded Systems》,中文名叫做《嵌入式系统的微模块化程序设计-实用状态图C/C++实现》,北航出版的,...
Eclipse IDE for C/C++是专为C/C++开发者设计的一款强大的集成开发环境(IDE),尤其在Windows 32位操作系统上表现出色。Eclipse作为一个开源项目,它提供了丰富的功能和高度可扩展性,使得软件开发变得更加高效和...
本项目专注于使用C++语言实现对HTTP、HTTPS和FTP协议的支持,以实现文件的下载功能。这些协议是互联网上最常用的三种数据传输协议,各自有其特定的应用场景和优势。 HTTP(超文本传输协议)是最基本的网络协议之一...
c / c++ / cpp / stl 中文帮助文档手册chm格式下载 C/C++ 语言参考 基本C/C++ 预处理命令 操作符优先级 转义字符 ASCII码表 基本数据类型 关键字 标准 C 库: Standard C I/O Standard C String...
这个文档压缩包包含普通C/C++中文文档和蓝桥杯比赛时用的文档,C/C++中文文档是最新版,支持到C++20和C18,且包含以前版本的内容。蓝桥杯蓝桥杯C/C++组用的文档比正常文档更简略,但包含了ASCII码表。
在C++中实现文件系统,开发者需要理解文件I/O操作、目录结构和文件权限等基本概念。C++标准库提供了一系列的文件操作函数,如fstream库,用于读写文件,以及dirent库,用于处理目录操作。 在这个模拟器中,文件被...
在设计和实现多路PCM混音算法时,需要考虑性能优化,尤其是在资源有限的嵌入式系统中。同时,良好的编程实践,如内存管理和错误处理,也是保证程序稳定运行的关键。 在深入研究这些源码时,开发者需要熟悉C/C++语言...