Это кажется очень разумным ограничением доступа к файлам периферийных устройств с очень ограниченной памятью (ограниченная быстрая энергозависимая память и код EEPROM более важны, чем размер флэш-карты).
Это не файловая система (которая почти универсально FAT или FAT32 для устройств такого типа) или даже ограничения в драйвере Windows (хотя ограничения, вероятно, применяются там, чтобы избежать путаницы в устройстве), а ограниченное число файловых дескрипторов в встроенный в устройство код доступа к файлу.
В результате вам, вероятно, придется обходить эти и другие неподдерживаемые функции драйвера.
В связанной заметке несколько потоков обычно не являются правильным способом выполнения операций фонового ввода-вывода. Если ваши устройства поддерживают операцию OVERLAPPED, вы можете использовать ее вместе с событиями и MsgWaitForMultipleObjects (который заменяет PeekMessage или GetMessage в классическом цикле основных событий GetMessage / TranslateMessage / DispatchMessage). Сохраняя все в одном потоке, вы избегаете проблем с синхронизацией, большинства условий гонки и предотвращаете следующую проблему:
- Ваш клиент хочет выбрать и использовать
один из файлов на ее устройстве, но
о нет, используется только IStream
на ветке читай миниатюры. Тоже
плохо, придется ждать этой ветки
закончить текущий файл.