У меня есть такая проблема: у меня есть коллекция маленьких файлов, каждый размером около 2000 байт (все они одинакового размера), и их около 100 000, что составляет около 200 мегабайт пространства. Мне нужно иметь возможность в реальном времени выбирать диапазон в этих файлах. Произнесите файлы от 1000 до 1100 (всего 100 файлов), прочитайте их и отправьте их по сети прилично быстро.
Хорошо, что файлы всегда будут читаться последовательно, то есть всегда будет диапазон, скажем, «из этого файла и еще сотни», а не «этот файл здесь, и этот файл там и т. Д.». ».
Файлы также могут быть добавлены в эту коллекцию во время выполнения, так что это не фиксированное количество файлов.
Текущая схема, которую я придумала, такова: ни один файл не превышает 2000 байт, поэтому вместо нескольких файлов, выделенных на диске, я собираюсь создать один большой файл, содержащий все другие файлы, даже 2048 байт. интервалы с 2 первыми байтами каждого блока 2048, являющимися фактическим размером байта файла, содержащегося в следующих 2046 байтах (размер файла колеблется между 1800 и 1950 байтами или около того), а затем ищите внутри этого файла вместо открытия нового файла обрабатывать каждый файл, который мне нужно прочитать.
Поэтому, когда мне нужно получить файл в позиции X, я просто сделаю X * 2048, прочитайте первые два байта, а затем прочитайте байты от (X * 2048) +2 до размера, содержащегося в первых двух байтах. Этот большой 200-мегабайтный файл будет добавляться только для безопасного чтения, даже когда сериализованный поток ввода / процесс (еще не определен) добавляет к нему больше данных.
Это должно быть выполнимо в Windows, вариант C, но я бы предпочел C #.