2010-02-22 19 views
5

Obecnie pracuję nad podobną do Paint aplikacją WPF, a teraz stoję przed problemem, w jaki sposób umożliwiam moim użytkownikom zapisywanie utworzonych obrazów. Normalnie po prostu zapisałbym je na dysku, ale w tej aplikacji mam obowiązek późniejszego umożliwienia użytkownikowi tworzenia większych "obrazów" z już utworzonych. W normalnym systemie plików nadal nie byłoby problemu, ale użytkownik powinien również móc wyszukiwać obrazy według określonych właściwości, takich jak kategorie/znaczniki itp., Co byłoby trudne przy normalnym podejściu do systemu plików.C#: Wewnętrzna baza danych plików w aplikacji

Pomyślałem więc o niektórych opcjach, które mam, aby zrealizować to, czego chcę, a teraz chciałbym wiedzieć, co myślisz o podejściu lub jeśli znasz nawet lepszy. Podejścia są:

  • Zapisywanie obrazów w wewnętrznej bazie danych aplikacji (poprzez SQLite lub coś podobnego)
  • zapisywania obrazów jak normalne pliki w systemie plików i mieć bazę danych w aplikacji na odniesienie tych obrazów (co się stanie, jeśli zdjęcia zostały usunięte przez użytkownika?)
  • obrazów zapisywanie jako normalnych plików w systemie plików bez dodatkowej bazy danych w aplikacji (trudno filtrować je według kategorii etc.)

Dzięki!

Odpowiedz

1

Wiele programów (np. Aperture, Lightroom, Expression Media, aby wymienić tylko kilka) zapisują swoje obrazy na dysku, a następnie przechowują pamięć podręczną metadanych w bazie danych. Wydaje się to najbardziej sensownym podejściem do twojej aplikacji.

1

SQLITE będzie dobrym wyborem, jaki czuję. Wersja BLOB od 3 jest w pełni obsługiwana, więc możesz myśleć o SQLITE.

0

pójdę za drugim podejściem i użyć FileSystemWatcher do śledzenia zmian, podczas gdy program jest uruchomiony i rozpocząć synchronizację podczas uruchamiania do śledzenia zmian od czasu ostatniego APP biegać.

SqlLite lub SQL Compact Editio są dobrym wyborem dla lokalnej bazy danych do śledzenia metadanych.

+1

FileSystemWatcher ma pewne ograniczenia, gdy duża liczba plików jest dodawana/usuwana w tym samym czasie, ale jeśli tylko jeden lub dwa pliki są dodawane/usuwane w tym samym czasie, powinno być OK. – ChrisF

0

Z pewnością możliwe jest zapisanie obrazu w bazie danych. Możesz w rzeczywistości zapisać strumień obrazów tak, jak zapisałby się w pliku, aby zaoszczędzić miejsce. Podczas czytania po prostu rozpakuj za pomocą funkcji czytnika strumienia.

Nie ma to problemu z pozostałymi dwoma rozwiązaniami (radzenie sobie z usuwaniem plików, wyszukiwanie plików według kategorii).

Można zapisywać pliki za pomocą systemu plików, tworząc foldery i podfoldery na podstawie kategorii, ale to nie pozwala na elastyczność posiadania więcej niż jednej kategorii na plik.