Как предоставить огромное количество файлов как часть вашего приложения - PullRequest
4 голосов
/ 18 апреля 2011

Итак, мое приложение зависит от огромного количества маленьких файлов.Фактическое число составляет около 90 000.Теперь я использую компонент, которому нужен доступ к этим файлам, но единственный способ, которым он принимает их, - это использование URI.

До сих пор я просто добавил каталог, содержащий все файлы, к моей отладке.папка, пока я разработал приложение.Однако теперь я должен рассмотреть вопрос о развертывании.Какие у меня есть варианты включения всех этих файлов в мое развертывание?

До сих пор я придумал пару разных решений, ни одно из которых мне не удалось заставить работать полностью.Сначала нужно было просто добавить все файлы в установщик, который затем скопировал бы их на свои места.По крайней мере, теоретически это сработает, но это сделает обслуживание установщика (стандартного MSI-установщика, созданного с помощью VS) абсолютным адом.

Следующая опция, которую я придумал, заключалась в том, чтобы сжать их водин файл и добавьте его как часть установщика, а затем разархивируйте его с помощью специального действия.Однако стандартные библиотеки, похоже, не поддерживают сложные zip-файлы, что делает этот вариант довольно сложным.

Наконец, я понял, что могу создать отдельный проект и добавить все файлы в качестве ресурсов в этот проект.,Чего я не знаю, так это как работают URI, указывающие на ресурсы, хранящиеся в других сборках.Имеется в виду, является ли это "стандартным" для всего, что поддерживает формат "application: // ,,,: Assembly"?

Итак, это единственные варианты, которые у меня есть, или есть и другие??И как лучше всего это сделать?

Ответы [ 4 ]

4 голосов
/ 18 апреля 2011

Я бы использовал один архивный файл, похожий на zip, и не распакуйте этот файл на жесткий диск, но оставьте его как есть.Это также подход, используемый несколькими хорошо известными приложениями, которые зависят от множества небольших файлов.

Windows поддерживает использование zip-файлов в качестве виртуальных папок (начиная с XP), пользователи могут просматривать и редактировать свой контент с помощью стандартных инструментов, таких какПроводник Windows.

C # также имеет отличную поддержку zip-файлов, если вам не нравятся встроенные инструменты, я рекомендую одну из основных библиотек Zip - они очень просты в использовании.

Если вы беспокоитесь о производительности, кэширование файлов в памяти - простое упражнение.Если ваш вариант использования на самом деле требует наличия файлов на диске, это тоже не проблема, просто распакуйте их при первом использовании - это всего лишь несколько строк кода.

Короче, просто используйте zip-архив и хорошийбиблиотеки, и вы не столкнетесь с какими-либо проблемами.

В любом случае, я бы не вставил бы это огромное количество файлов непосредственно в ваше приложение.Файлы данных должны быть отдельными.

0 голосов
/ 18 апреля 2011

Один из вариантов - хранить их в сложном хранилище и получать к ним доступ прямо в хранилище.Статья на нашем сайте описывает различные типы хранилищ и их преимущества / особенности.

0 голосов
/ 18 апреля 2011

Другим вариантом может быть создание самораспаковывающегося архива zip / rar и извлечение его из установщика.

0 голосов
/ 18 апреля 2011

Вы можете включить файлы в zip-архив, и само приложение разархивирует их при первом запуске как часть окончательной конфигурации, если это нецелесообразно делать из установщика.Это не совсем нетипично (например, кажется, что большинство приложений Microsoft выполняют настройку после установки при первом запуске).

В зависимости от того, как используются ресурсы, вы можете иметь сервис, который предоставляет их по запросу.из какого-то магазина и кеширует их, а не сбрасывает их куда-то.Это может иметь или не иметь смысла в зависимости от того, для чего предназначены эти ресурсы, например, если они являются элементами пользовательского интерфейса, задержка при первом доступе может оказаться неприемлемой.локальный сервер или сервер SQL, если он уже используется, кешируя их, что было бы неплохо для обслуживания, но может не работать для среды.

Я бы не стал делать ничего, что связано со встроеннымресурс для каждого файла в отдельности, это было бы чертовски сложно.

...