📄 fat32.h
字号:
/********************************************************/
/* */
/* 库 名 称:FAT32文件系统函数库 */
/* 功 能 描 述:提供对FAT32文件系统按文件名存取 */
/* */
/********************************************************/
#ifndef _TYPE_DEFINE
#define _TYPE_DEFINE
typedef bit BOOL;
typedef unsigned char BYTE;
typedef unsigned char CHAR;
typedef unsigned int WORD;
typedef unsigned long DWORD;
#endif
#ifndef _FAT32_DEFINE
#define _FAT32_DEFINE
#define FAT32_MAX_FCB 2
//文件属性
#define FAT32_ATTR_READ_ONLY 0x01 //文件属性:只读
#define FAT32_ATTR_HIDDEN 0x02 //文件属性:隐含
#define FAT32_ATTR_SYSTEM 0x04 //文件属性:系统
#define FAT32_ATTR_VOLUME_ID 0x08 //文件属性:卷ID
#define FAT32_ATTR_DIRECTORY 0x10 //文件属性:目录
#define FAT32_ATTR_ARCHIVE 0x20 //文件属性:归档
#define FAT32_ATTR_LONG_NAME FAT32_ATTR_READ_ONLY+FAT32_ATTR_HIDDEN+FAT32_ATTR_SYSTEM+FAT32_ATTR_VOLUME_ID //文件属性:长文件名
#define FAT32_ATTR_LONG_NAME_MASK FAT32_ATTR_READ_ONLY+FAT32_ATTR_HIDDEN+FAT32_ATTR_SYSTEM+FAT32_ATTR_VOLUME_ID+FAT32_ATTR_DIRECTORY+FAT32_ATTR_ARCHIVE //文件属性:长文件名
#define FAT32_LAST_LONG_ENTRY 0x40 //长文件名入口标记
#define FAT32_ERR_MBR_FLAG 0x01 //MBR扇区标志错误 FAT32MountPartition
#define FAT32_ERR_PARTITION_NOT_FOUND 0x02 //指定分区没找到 FAT32MountVolumeID
#define FAT32_ERR_FILE_OPEN_ERROR FAT32_MAX_FCB //文件打开错误
#define FAT32_ERR_DIR_NOT_FOUND 0x01 //指定的目录入口没有找到F FAT32ChangeDirectory
#define FAT32_ERR_NOT_DIR 0x02 //不是一个目录入口 FAT32ChangeDirectory
//#define IO_ERROR 0x00 //遇到io错误
//#define NO_IO_ERROR 0x01 //没有遇到io错误
//计算指定簇的开始扇区号
#define ClusterToSector(X) FAT32.ClusSec + (X - 2) * FAT32.SecPerClus
struct BootSecFAT16Str //引导扇区 FAT16 扩展结构
{
BYTE BS_DrvNum;
BYTE BS_Reserved1;
BYTE BS_BootSig;
DWORD BS_VolID;
char BS_VolLab[11];
char BS_FilSysType[8];
};
struct BootSecFAT32Str //引导扇区 FAT32 扩展结构
{
DWORD BPB_FATSz32; //FAT32扇区总数
WORD BPB_ExtFlags;
WORD BPB_FSVer;
DWORD BPB_RootClus; //根目录开始的簇
WORD BPB_FSInfo;
WORD BPB_BkBootSec;
char BPB_Reserved[12];
BYTE BS_DrvNum;
BYTE BS_Reserved1;
BYTE BS_BootSig;
DWORD BS_VolID;
char BS_VolLab[11];
char BS_FilSysType[8];
};
struct BootSecStr //引导扇区结构
{
BYTE BS_jmpBoot[3];
BYTE BS_OEMName[8];
WORD BPB_BytesPerSec; //每扇区字节数 512
BYTE BPB_SecPerClus; //每簇扇区数 1 2 4 8 16 32 64 128
WORD BPB_RsvdSecCnt; //保留扇区数 0x20
BYTE BPB_NumFATs; //FAT表个数 2
WORD BPB_RootEntCnt;
WORD BPB_TotSec16;
BYTE BPB_Media;
WORD BPB_FATSz16;
WORD BPB_SecPerTrk;
WORD BPB_NumHeads;
DWORD BPB_HiddSec;
DWORD BPB_TotSec32;
union FATUni
{
struct BootSecFAT32Str F32;
struct BootSecFAT16Str F16;
}FAT;
};
struct DPTStr //分区表结构
{
BYTE BootFlag;
BYTE CHSBegin[3];
BYTE TypeCode;
BYTE CHSEnd[3];
DWORD LBABegin;
DWORD CntSec;
};
struct sDPTStr //简化的分区表
{
BYTE TypeCode;
DWORD LBABegin;
DWORD CntSec;
};
struct FAT32FSInfoStr //FAT32扩展信息结构
{
DWORD LeadSig;
BYTE Reserved1[480];
DWORD StrucSig;
DWORD FreeCount;
DWORD NxtFree;
BYTE Reserved2[12];
DWORD TrailSig;
};
struct FAT32SDirStr //FAT目录结构 短文件名
{
CHAR Name[11];
BYTE Attr;
BYTE NTRes;
BYTE CrtTimeTenth;
WORD CrtTime;
WORD CrtDate;
WORD LstAccDate;
WORD FstClusHI;
WORD WrtTime;
WORD WrtDate;
WORD FstClusLO;
DWORD FileSize;
};
struct FAT32LDirStr //FAT目录结构 长文件名
{
BYTE Ord;
BYTE Name1[10];
BYTE Attr;
BYTE Type;
BYTE Chksum;
BYTE Name2[12];
WORD FstClusLO;
BYTE Name3[4];
};
struct FAT32Str //FAT32参数表
{
BYTE ClusSecCnt; //当前簇扇区计数
DWORD CurrentDirectory; //当前目录入口(簇号)
BYTE SecPerClus; //每簇扇区数 1 2 4 8 16 32 64 128
WORD RsvdSecCnt; //保留扇区数 0x20
BYTE NumFATs; //FAT表个数 2
DWORD RootClus; //根目录开始的簇
DWORD ClusSec; //簇开始的扇区
DWORD FATSz; //FAT表大小(扇区)
DWORD FATSec; //FAT表开始扇区
DWORD FSISec; //FSI所在扇区
DWORD FSIFreeCount; //空闲簇数
DWORD FSINxtFree; //空闲簇搜索指针
};
struct FCBStr
{
CHAR FileName[12]; //文件名
DWORD Size; //文件大小
DWORD FirstCluster; //第一个簇
DWORD LastCluster; //最近一次读到的簇号
DWORD ClusSecCnt; //当前簇扇区计数
DWORD ByteCnt; //当前字节计数
};
struct FATStr
{
DWORD Sector;
DWORD FAT[128];
};
#ifndef _LIBRARY_DEFINE
xdata BYTE DiskBuffer[512];
xdata struct sDPTStr sDPT[4];
xdata struct FAT32Str FAT32;
xdata struct FCBStr FCB[FAT32_MAX_FCB];
xdata CHAR LongFileName[256];
xdata struct FATStr FAT;
xdata struct DPTStr *DPT; //分区表结构指针
xdata struct BootSecStr *BOOTSEC; //引导扇区结构指针
xdata struct FAT32FSInfoStr *FSI; //FAT32扩展信息
xdata struct FAT32SDirStr *sDIR; //FAT目录结构指针
xdata struct FAT32LDirStr *lDIR; //FAT目录结构指针
#endif
#endif
extern xdata BYTE DiskBuffer[512];
extern xdata struct sDPTStr sDPT[4];
extern xdata struct FAT32Str FAT32;
extern xdata struct FCBStr FCB[FAT32_MAX_FCB];
extern xdata CHAR LongFileName[256];
extern xdata struct FATStr FAT;
extern xdata struct DPTStr *DPT; //分区表结构指针
extern xdata struct BootSecStr *BOOTSEC; //引导扇区结构指针
extern xdata struct FAT32FSInfoStr *FSI; //FAT32扩展信息
extern xdata struct FAT32SDirStr *sDIR; //FAT目录结构指针
extern xdata struct FAT32LDirStr *lDIR; //FAT目录结构指针
extern void FAT32Init(void);
extern BYTE FAT32MountPartition(void);
extern BYTE FAT32MountVolumeID(BYTE Partition);
extern BYTE FAT32GetDirName(WORD SecNum);
extern void FAT32GetPartLongName(struct FAT32LDirStr *ldp,CHAR *name);
extern DWORD FAT32DiskSize(void);
extern DWORD FAT32DiskFreeSize(void);
extern BYTE FAT32FindDIREntry(CHAR *DirName);
extern void FAT32ReadCluster(DWORD *Cluster);
extern BYTE FAT32ChangeDirectory(CHAR *DirName);
extern BYTE FAT32ListDirectory(void);
extern DWORD FAT32NextCluster(DWORD CurrentCluster);
extern BYTE FAT32OpenFile(CHAR *filename);
extern void FAT32CloseFile(BYTE fp);
extern WORD FAT32ReadFile(BYTE fp);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -