问题标签 [fat16]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
377 浏览

c++ - FAT,检索文件时优化性能

我有一个每条记录一个文件的数据库实现,我有大约 10000 条记录。我正在尝试优化访问文件的性能,我有点怀疑。

将文件拆分到文件夹中是否比将所有文件保存在单个文件夹中更好,以便快速访问文件?例如:文件夹 0 中从 0 到 999,文件夹 2 中从 1000 到 1999 等等...

FAT16FAT32哪个更好?

0 投票
1 回答
1397 浏览

microcontroller - FAT16 目录

我正在开发一个低级应用程序,它在资源受限的微控制器上使用 FAT16 文件系统结构,这需要我编写自己的自定义访问代码。我已经研究过使用 Petit FAT 和 FatFS 等库,但不幸的是,我认为这两种库都不适合我的需求。不过,它们已成为 FAT 工作原理的有用参考。

我仍然遇到问题的一个领域是子目录条目。

据此目录条目能够指向 1 个启动集群。对于数据文件,这只是第一个数据簇。对于目录,这是子目录的起始簇(可能是另一个目录条目)。

如果从根目录到基本文件只有 1 个目录路径,这可以正常工作,但我不明白这如何允许您分支到任何给定目录下的多个文件/目录。

前任。目录结构:

根据我对FAT16结构的理解,

紧随 FAT 的将是第一个根目录条目的簇,其中包含root dir 1. 然后,第一个集群字段将包含 的集群地址sub dir 1,谁的第一个集群字段将包含 的集群地址file 1,谁的第一个集群指向数据集群。

然后,第二个根目录条目将在包含root dir 2. 它的第一个簇将指向 的簇sub dir 3,谁的第一个簇将指向一个空簇(如 FAT 中标记的那样)。

我在这里想念什么?我想不出一种从根目录条目向下导航到sub dir 2.

0 投票
2 回答
2818 浏览

filesystems - 如何遍历FAT目录,文件

我试图了解 FAT 文件系统是如何工作的。从附加的 FAT 16 分区的第一个扇区我可以理解,

  1. 每个扇区的字节数 = 512。
  2. 每个集群的扇区 = 4。
  3. FAT 16 文件系统。
  4. 保留扇区 = 4。
  5. FAT 表计数 = 2。
  6. 根目录中的条目数 = 512。
  7. 总扇区 = 204800。
  8. 根目录扇区 = 32。
  9. FAT 表的大小 = 200。
  10. 第一个数据扇区 = 436 (4 + 2 * 200 + 32)。
  11. 集群计数 = 51091。

FAT分区的第一个扇区

根目录位于第 404 个扇区(第 0x32800 个字节)

根目录

附加地址 0x32800 的根目录。根目录有两个文件夹a、b 和一个文件file.txt。在上面的给定图像中,如何区分文件和文件夹。

下面列出的疑问: 1. 文件夹条目应该以 0x2E 开头,但没有这样的值。那么如何判断给定条目是文件还是文件夹呢?2. 如您所见,根目录中的每个条目占用 64 个字节(而不是 32 个字节)。每个文件和文件夹似乎有 2 个 32 字节的条目。例如,文件夹“a”的条目位于 0x32800 和 0x32820(共 64 字节)。3. 在这种情况下,值 0x41 表示什么?值 0x41 出现在 0x32800、0x32820、0x32840、0x32880。0x32860 和 0x328A0 处的值与 0x41 不同。4. 从地址 0x32800 (0x32800 + 0x1a = 0x3281a) 的偏移量 0x1A 的值为 0,从地址 0x32820 (0x32820 + 0x1a = 0x3283a) 的偏移量 0x1A 的值为 3. 对应于文件夹 'a' 的正确簇号是哪个?

0 投票
1 回答
1076 浏览

filesystems - fat16中如何区分目录和文件入口?

如果在 fat16 系统中,我对区分子目录和文件感到很困惑。子目录和文件结构相似,如何区分目录和文件,如何遍历目录到达文件?

我最初认为所有目录条目都将以“0x2e”作为 fat16 中 8.3 命名约定的第一个字节。但实际上我找不到所有以 0x2e 开头的目录,而是直接找到目录的名称。那么,如何区分 fat16 中的目录和文件呢?

0 投票
1 回答
603 浏览

filesystems - 了解 FAT16

我正在开发带有FAT16文件系统的基于闪存的 USB 大容量存储设备。它工作正常,但是我很难理解 FAT 段上发生了什么。

当我开始时,我在根目录上有一个 56 字节长的文件,它长 32 位,数据存储在第二个集群上(0 和 1 不能在 FAT 中使用)。

如果我查看 FAT 段的内存转储,我会看到:

据我了解,最后一个 0xFFFF 意味着该集群是该文件链中的最后一个集群。

到目前为止,一切都很好。

但是......当我将实际文件的大小扩展到 4,032 字节时,FAT 段变成

谁能解释这里发生了什么?

我看到了一些我无法解释的事情:

1.为什么4个系统保留字节会改变?

2. 我看不到任何 0xFFFF 这意味着集群链没有尽头?

如果它对任何人有帮助,块大小为 512 字节,文件系统被格式化为每个集群 2 个段。

0 投票
0 回答
189 浏览

python - os.listdir 更改 FAT16 USB 闪存驱动器上的返回文件名

我有以下代码段:

这会返回类似

中间文件的名字其实是

我在 32 位机器上运行 OS X 10.6.8、Enthought Python 7.3-2、Python 2.7.3 和 iIython 0.13.1。这些文件是在 Windows XP 机器上使用 Python 生成的数据文件,位于 FAT16 格式的 USB 闪存驱动器上。我已更改闪存驱动器上的位置以缩短整体路径,但错误仍然存​​在。

当文件复制到硬盘时,代码没有问题,文件名也没有改变。

当文件复制到服务器的硬盘驱动器时,相同的代码可以在 RHEL 6.3、IPython 0.12 和 Python 2.7.2 上运行而没有问题。

为什么 listdir 当它存储在 FAT16 闪存驱动器上时会更改该文件的名称?

0 投票
0 回答
651 浏览

c++ - 将文件写入 fat16 文件系统

所以,我最近修改了我在网上找到的这段代码,这是一个命令行工具,可以复制 FAT16 文件系统中的文件,并将其放入您的“常规”;目录:

我现在想要做的是有一个命令,它从你的常规目录中获取一个文件,复制它,并将该副本放入 FAT16 中。有没有人知道如何做到这一点?

0 投票
2 回答
4499 浏览

linux - “对于 16 位 FAT 没有足够的集群”,但我超过了最小大小。为什么?

我正在尝试在我的 Ubuntu 上创建一个 FAT16 文件系统。

所以,我首先用dd if=/dev/zero of=Fat16.bin bs=1024 count=8192.

这将创建一个充满零的 8MB 文件。

然后,我通过发出以下命令将此文件格式化为 FAT16 文件系统mkfs.vfat -f2 -n FAT16 -r 224 -s8 -S512 -F16 Fat16.bin

但这给了我以下错误。

就我而言,FAT16 文件系统的最小大小为 4MB,所以我不明白这里发生了什么。

0 投票
1 回答
1345 浏览

file - 读取 FAT16 文件系统

我正在尝试读取 FAT16 文件系统以获取有关它的信息,例如扇区数、簇数、字节扇区数等...

我正在尝试这样阅读:

它输出这个:

这些数字代表什么,它们是什么类型?字节?

0 投票
1 回答
3111 浏览

python - 禁用特定文件上的缓存/缓冲区 (Linux)

我目前正在使用 Yocto Linux 构建并尝试与 FPGA 上的硬件块进行交互。该块正在模仿带有 FAT16 文件系统的 SD 卡;包含单个文件 (cam.raw)。这个文件代表了FPGA和linux系统之间的共享内存空间。因此,我希望能够将 linux 系统中的数据写入此内存并取回 FPGA 可能做出的任何更改(目前,FPGA 只是从内存空间中获取部分数据并将 6 添加到32 位字,就像我写 0x40302010 并且如果我读回数据应该返回 0x40302016)。但是,由于某处有缓存,虽然我可以将数据写入 FPGA,但我无法立即取回结果。

我目前正在做这样的事情(使用python,因为它很容易):

我可以用 dd 确认数据已更改(尽管我也经常遇到缓冲问题)并使用 FPGA 工具(SignalTap/ChipScope)我确实得到了正确的答案(即第一个 32 位字在这种情况下是 0x03020106)。然而,有人,无论是它的python还是linux或两者都在缓冲文件,而不是再次从“SD卡”(FPGA)读取并将文件数据存储在内存中。我需要完全关闭它,以便所有读取都会导致从 FPGA 读取;但我不确定缓冲发生在哪里或如何做到这一点。

任何见解将不胜感激!(注意,我可以使用 mmap.flush() 来获取我从 python 写入的任何数据以将其转储到 FPGA,但我需要像反向刷新或其他东西让它将文件数据重新读入 mmap!)

更新:

正如评论中所建议的, mmap 方法可能不是实现我需要的最佳方法。但是,我现在在 python 和 C 中都尝试过,但是使用 O_DIRECT 标志使用基本的 I/O 函数(python 中的 os.read/write,C 中的读/写)。对于大多数这些操作,我最终得到 errno 22。仍在研究这个....