C #: внутренняя файловая база данных в приложении - PullRequest
5 голосов
/ 22 февраля 2010

В настоящее время я работаю над Paint-подобным WPF-приложением и сейчас стою перед проблемой, как разрешить пользователям сохранять созданные изображения. Обычно я просто сохраняю их на диск, но в этом приложении у меня есть требование, чтобы позже позволить пользователю создавать большие "изображения" из уже созданных. Это все равно не будет проблемой при обычном подходе к файловой системе, но пользователь также должен иметь возможность поиска изображений по определенным свойствам, таким как категории / теги и т. Д., И это будет сложно при обычном подходе к файловой системе.

Так что я подумал о некоторых вариантах, которые у меня есть для реализации того, что я хочу, и теперь хотел бы узнать, что вы думаете о подходах или, если вы знаете, лучший. Подходы:

  • Сохранение изображений во внутренней базе данных приложения (через SQLite или что-то подобное)
  • Сохранение изображений в виде обычных файлов в файловой системе и хранение базы данных в приложении для ссылки на эти изображения (что произойдет, если изображения были удалены пользователем?)
  • Сохранение изображений в виде обычных файлов в файловой системе без дополнительной базы данных в приложении (сложно отфильтровать их по категориям и т. Д.)

Спасибо!

Ответы [ 5 ]

1 голос
/ 22 февраля 2010

Многие программы (т. Е. Aperture, Lightroom, Expression Media и многие другие) хранят свои изображения на диске, а затем поддерживают кэш метаданных в базе данных. Это кажется наиболее разумным подходом для вашего приложения.

1 голос
/ 22 февраля 2010

Вы можете сохранять файлы в файловой системе, а также сохранять или читать метаданные напрямую. Эта функция также доступна пользователю за пределами вашего приложения в Windows 7 / Vista ... Я думаю, что это называется тегами изображений. Вам нужно будет разобрать XML.

Хороший пример: http://johndyer.name/post/2006/09/01/Quick-C-Vista-Photo-Tag-Reader.aspx

1 голос
/ 22 февраля 2010

SQLITE будет хорошим выбором, я чувствую. Полная версия BLOB полностью поддерживается, так что вы можете подумать о SQLITE.

0 голосов
/ 22 февраля 2010

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

У этого нет проблем двух других решений (справка с удалением файлов, поиск файлов по категориям).

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

0 голосов
/ 22 февраля 2010

Я бы пошел на второй подход и использовал FileSystemWatcher для отслеживания изменений во время работы программы и запуска синхронизации во время запуска для отслеживания изменений с момента последнего запуска приложения.

SqlLite или SQL Compact Editio - хороший выбор для локальной базы данных для отслеживания метаданных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...