关于读取独占文件的问题

noface 2009-07-24 02:08:19
各位达人,请问在fat32下和ntfs下读取独占文件的时候,有何不同?因为ntfs的可以读取,但是fat32的始终不行,字节数是正确的,但是内容是错误的,一直找不到原因,恳请各位达人指点.

chenhui530曾经指点过,fat下偏移量需要加上保留扇区+fatarearcount*2 ,不明白这句话是修改什么地方,是不是修改下边的函数呢?

Call SetFilePointer(hDrive, ligNo.LowPart, ligNo.HighPart, 0)
...全文
67 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
noface 2009-07-24
  • 打赏
  • 举报
回复
谢谢了
Yofoo 2009-07-24
  • 打赏
  • 举报
回复
FAT32的文件数据区 = 保留扇区 + FAT区 + FDT区

我以前写了类似的代码给你参考:



#pragma pack(1)
typedef struct _Fat32BootData
{
BYTE jump[3]; // 0x00 Boot strap short or near jump
char bsOemName[8]; // 0x03 Name - can be used to special case partition manager volumes
WORD BytesPerSector; // 0x0B bytes per logical sector
BYTE SectorsPerCluster; // 0x0D sectors/cluster
WORD ReservedSectors; // 0x0E reserved sectors
BYTE NumberOfFATs; // 0x10 number of FATs
WORD RootEntries; // 0x11 root directory entries
WORD TotalSectors; // 0x13 number of sectors
BYTE MediaDescriptor; // 0x15 media code (unused)
WORD SectorsPerFAT; // 0x16 sectors/FAT FAT16
WORD SectorsPerTrack; // 0x18 sectors per track
WORD Heads; // 0x1A number of heads
DWORD HiddenSectors; // 0x1C hidden sectors (unused)
DWORD BigTotalSectors; // 0x20 number of sectors (if sectors == 0)
// The following fields are only used by FAT32
DWORD BigSectorsPerFat; // 0x24 sectors/FAT FAT32
WORD ExtFlags; // 0x28 bit 8: fat mirroring, low 4: active fat
WORD FS_Version; // 0x2A major, minor filesystem version
DWORD RootDirStrtClus; // 0x2C first cluster in root directory
WORD FSInfoSec; // 0x30 filesystem info sector
WORD BkUpBootSec; // 0x32 backup boot sector
WORD Reserved[6]; // 0x34 Unused
BYTE bsDriveNumber; // 0x40
BYTE bsReserved; // 0x41
BYTE bsBootSignature; // 0x42
DWORD bsVolumeID; // 0x43
char bsVolumeLabel[11]; // 0x47
char bsFileSysType[8]; // 0x52
BYTE unused [422]; // 0x5A
}Fat32BootData;
#pragma pack()


DWORD dwReservedSectors;
DWORD dwFatSectors;
DWORD dwDirtoryTableSectors;

dwReservedSectors = Boot.ReservedSectors;
dwFatSectors = Boot.BigSectorsPerFat * Boot.NumberOfFATs; //FAT32
dwDirtoryTableSectors = ((Boot.RootEntries * 32 - 1) / m_dwBytesPerSector + 1) * m_dwBytesPerSector;

m_dwFat32FirstDataSector = dwReservedSectors + dwFatSectors + dwDirtoryTableSectors;

2,643

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧