Tag: fat32

Unix时间戳到FAT时间戳

我试图将时间结构转换为FAT时间戳。 我的代码看起来像: unsigned long Fat(tm_struct pTime) { unsigned long FatTime = 0; FatTime |= (pTime.seconds / 2) >> 1; FatTime |= (pTime.minutes) << 5; FatTime |= (pTime.hours) << 11; FatTime |= (pTime.days) << 16; FatTime |= (pTime.months) << 21; FatTime |= (pTime.years + 20) << 25; return FatTime; } 有人有正确的代码吗?

c语言中数据类型BYTE,WORD和DWORD的格式说明符?

在C语言中,对于与printf和scanf函数一起使用的数据类型BYTE,WORD和DWORD,最合适的格式说明符是什么? 我很难在控制台上显示BPB字段的值。 例如,如果我尝试使用“%lu”显示BPB_BytsPerSec,我会得到不同寻常的数据。 printf(“Bytes per Sector: %lu”, b->BPB_BytsPerSec); 我得到一个“514”的值,我相信,这是错误的解释..请建议出路。 谢谢。 (我通过MinGW使用gcc 5.1,通过64位Windows) 这是我们正在讨论的结构: /* BPB Structure Collected from internet */ struct BPB_FAT32 { BYTE BS_jmpBoot[3]; // 0 BYTE BS_OEMName[8]; // 3 WORD BPB_BytsPerSec; // 11 BYTE BPB_SecPerClus; // 13 WORD BPB_ResvdSecCnt; // 14 BYTE BPB_NumFATs; // 16 WORD BPB_RootEntCnt; // 17 WORD BPB_TotSec16; // 19 […]

FAT32每个目录限制的文件数

我正在尝试在Xillinx Kintex 7卡上用C编码FAT系统。 它配备了MicroBlaze,我已经设法创建了大部分所需的function。 我面临的问题是关于文件夹的总容量,我在网上看到在FAT32中一个文件夹应该能够包含超过65000个文件但是我已经安装了系统我是每个文件夹限制为509个文件。 我认为这是因为我理解了FAT32的工作方式,但这是我迄今为止所做的: 我创建了一个格式化函数,它将正确的数据写入MBR(扇区0)和卷ID(我的磁盘上的扇区2048)。 我创建了一个函数来写入根目录的内容(第一个集群在扇区124 148上开始) 我创建了一个函数来编写一个包含大小为X的N个文件的新文件夹。文件夹的名称写在根目录(扇区124148)中,文件名写在下一个簇(扇区124212,因为我已经将簇大小设置为64个扇区)。 最后,文件的内容(一个简单的计数器)写在从扇区124276开始的下一个簇上。 这里的问题是文件夹的大小为1簇,这意味着它的容量为64扇区= 32KB,我只能在目录中创建512(减2)个文件! 然后,我的问题是:是否可以更改群集数量的文件夹大小? 目前我只使用1个集群,我不明白如何更改它。 它与驱动器的FAT有关吗? 在此先感谢您的帮助! 注意:当我将其插入时,Windows可以识别我的驱动器,我可以访问和读取每个文件(超出510限制的文件除外),我可以通过Windows资源管理器创建新文件。 它显然来自我理解文件创建和文件夹创建的方式!

在C中使用fwrite时,文件大小限制为2GB?

我有一个简短的C程序写入文件,直到磁盘上没有更多的空间: #include int main(void) { char c[] = “abcdefghij”; size_t rez; FILE *f = fopen(“filldisk.dat”, “wb”); while (1) { rez = fwrite(c, 1, sizeof(c), f); if (!rez) break; } fclose(f); return 0; } 当我运行程序(在Linux中)时,它会在文件达到2GB时停止。 由于FILE结构,是否存在内部限制? 谢谢。