2013-03-05 2 views
0

Я делаю игру XNA, которая использует много (в настоящее время ~ 2800) небольших файлов ресурсов. Стало проблемой перемещать их с места на место, без каких-либо сбоев, поэтому я подумал, что, может быть, я мог бы просто застегнуть их и заставить их разархивировать их автоматически, в память, желательно. Мне еще не нужны возможности записи, сейчас только чтение.Работа с ZIP-папкой из памяти

Есть ли простой способ распаковать папку в память и получить доступ к этим файлам так же, как и обычные файлы на диске?


Я читал некоторые подобные вопросы, и я вижу, многие люди говорят, что ОС (Windows в моем случае) может обрабатывать файл кэширование лучше, чем баран диск. Я сейчас собираюсь распаковывать и читать файлы, но в будущем мне может потребоваться изменить или создать новые файлы, и я бы хотел, чтобы он был быстрым и понятным для пользователя. Может быть, я должен принять другой подход при решении моей текущей проблемы, учитывая мою будущую цель?

+0

не стесняйтесь изменить метки к более подходящим – user1306322

ответ

0

Я лично не пробовал это, но если вы хотите, чтобы иметь возможность почерпнуть/распаковать в памяти, вы можете просто использовать MemoryStream и передать это в библиотеку (например, https://github.com/icsharpcode/SharpZipLib). Вещи, которые вам, вероятно, нужно запомнить, вы просто двигаетесь узким местом в другое узкое место?

Вы также можете попробовать что-то вроде подхода с помощью спрайтов в HTML. Вы объединяете все свои Zip в 1 с индексом, где они находятся в файле. Затем вы перемещаете файл FileStream.Position в местоположение для ресурса, который вы ищете, читаете (количество, которое вам нужно), затем выполняйте то, что вам нужно. Вам нужно будет убедиться, что если вы перестроить любой, вы сделаете что-то перестроить все ваши комбинированные индексы и т. Д. Тогда вы просто будете копировать 1 файл вокруг, так получилось, что внутри этого файла у вас есть ~ 2800 меньших сегментов интереса.

+0

Я считаю, что «узкое место» памяти у нас огромно по сравнению с hdd one. Я попробовал диск с дисками, и это очень быстро, но мне нужно что-то, что я могу развернуть для конечных пользователей. Я думаю, что просто перетащить всю папку с файлами сделает трюк, это залог. – user1306322

+0

Вы могли бы использовать возможности файловой системы Zip для хранения всех ваших ресурсов в 1 файле? Тогда вы могли бы Разархивировать в memystream –

+0

Ах, если это то, о чем вы говорите, тогда, я думаю, нет. Но нужно ли мне это с файлами в памяти? Хорошо, я попытаюсь использовать метод MemoryStream чуть позже. – user1306322

Смежные вопросы