这些似乎是对内存非常有限的外围设备的文件访问的非常合理的限制(有限的快速易失性内存和代码 EEPROM 比闪存卡的大小更受关注)。
这不是文件系统(对于这些类型的设备几乎普遍是 FAT 或 FAT32),甚至不是 Windows 驱动程序中的限制(尽管可能在那里强制执行这些限制以避免混淆设备),而是设备嵌入的文件描述符数量有限文件访问代码。
因此,您可能必须为这些和其他不受支持的驱动程序功能提供解决方法。
在相关说明中,多线程通常不是执行后台 I/O 操作的正确方法。如果您的设备支持 OVERLAPPED 操作,那么您可以将其与事件和 MsgWaitForMultipleObjects 一起使用(在经典的 GetMessage/TranslateMessage/DispatchMessage 主事件循环中替换 PeekMessage 或 GetMessage)。通过将所有内容保持在一个线程上,您可以避免同步问题、大多数竞争条件,并防止以下问题:
- 您的客户想要在她的设备上选择并使用其中一个文件,但是哦,不,唯一的 IStream 正在用于读取缩略图的线程上。太糟糕了,必须等待该线程完成其当前文件。