?? 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 + -