2010-02-22 3 views
5

현재 Paint-like WPF 응용 프로그램에서 작업 중이며 문제가 발생하기 전에 사용자가 만든 이미지를 저장하는 방법을 설명합니다. 일반적으로 디스크에 저장 하겠지만이 응용 프로그램에서는 나중에 사용자가 이미 만든 이미지에서 더 큰 "이미지"를 만들 수 있어야합니다. 이것은 여전히 ​​일반적인 파일 시스템 접근 방식에 문제가 없지만 사용자는 카테고리/태그 등과 같은 특정 속성으로 이미지를 검색 할 수 있어야하며 정상적인 파일 시스템 접근 방식으로는 어려울 것입니다.C# : 응용 프로그램의 내부 파일 데이터베이스

그래서 나는 내가 원하는 것을 실현하기 위해 가지고있는 몇 가지 옵션을 생각해 보았습니다. 그리고 지금 당신이 접근법에 대해 어떻게 생각하는지, 또는 더 나은 것을 알고 있는지 알고 싶습니다. 접근 방법은 다음과 같습니다 : 응용 프로그램의 내부 데이터베이스에서 이미지를 저장

  • 정상 파일로
  • 이미지 저장 파일 시스템과 이러한 이미지를 참조하는 응용 프로그램에서 데이터베이스를 유지 ((SQLite는 또는 이와 유사한 통해) 무엇을 이미지는 사용자가 삭제 된 경우 어떻게됩니까?) 별도의 데이터베이스가없는 파일 시스템의 정상 파일로
  • 저장 이미지를 응용 프로그램에서 (하드 카테고리 등)

감사에 의해 그들을 필터하기 위해!

답변

1

많은 프로그램 (예 : Aperture, Lightroom, Expression Media)은 이미지를 디스크에 저장 한 다음 데이터베이스에 메타 데이터 캐시를 유지 관리합니다. 이것은 귀하의 어플리케이션을위한 가장 합리적인 접근법처럼 보입니다.

1

SQLite는 좋은 선택입니다. 버전 3 이후의 BLOB가 완벽하게 지원되므로 SQLite를 생각해 볼 수 있습니다.

1

파일 시스템에 파일을 저장하고 메타 데이터를 직접 저장하거나 읽을 수 있습니다. 이 기능은 Windows 7/Vista에서 응용 프로그램 외부의 사용자가 사용할 수 있습니다 ... 나는 그것이 이미지 태그라고 생각합니다. XML을 구문 분석해야합니다.

좋은 예 : http://johndyer.name/post/2006/09/01/Quick-C-Vista-Photo-Tag-Reader.aspx

0

내가 두 번째 접근 방식에 가서 프로그램이 실행되는 동안 변경 사항을 추적하기 위해 FileSystemWatcher를 사용하여 응용 프로그램이었다 마지막 시간 이후 변경 사항을 추적하기 시작하는 동안 동기화를 시작 했죠 운영.

SqlLite 또는 SQL Compact Editio는 로컬 데이터베이스에서 메타 데이터를 추적하기위한 좋은 선택입니다.

+1

많은 수의 파일을 동시에 추가/제거 할 때 FileSystemWatcher에는 몇 가지 제한 사항이 있지만 한 번에 하나 또는 두 개의 파일을 추가/제거하는 것이 좋습니다. – ChrisF

0

확실히 데이터베이스에 이미지를 저장할 수 있습니다. 공간 절약을 위해 이미지 스트림을 파일에 저장할 때 실제로 저장할 수 있습니다. 읽는 동안 스트림 리더 기능을 사용하여 압축을 풀면됩니다.

다른 두 가지 해결책 (파일 삭제, 카테고리별로 파일 찾기)에 문제가 없습니다.

파일 시스템을 사용하여 범주를 기반으로 폴더 및 하위 폴더를 만들어 파일에 저장할 수는 있지만 파일 당 둘 이상의 범주를 가질 수있는 유연성은 없습니다.

관련 문제