2012-09-28 6 views

답변

3

내 기존 sqlite 파일을 프로젝트의 공용 폴더에 추가하고 Build Action을 Content로 설정했습니다. 이 파일에 쓸 수 없으므로 응용 프로그램의 로컬 저장소 폴더에 복사해야합니다. 응용 프로그램을 시작할 때 데이터베이스를 초기화하는 StorageManagement 클래스를 만들었습니다.

public static class StorageManagement 
    { 
     public static async Task<bool> DoesFileExistAsync(string file) 
     { 
      try 
      { 
       await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync(file); 
       return true; 
      } 
      catch 
      { 
       return false; 
      } 
     } 

     public static async void InitializeDatabaseAsync() 
     { 
      if (!DoesFileExistAsync("MyDb.sqlite").Result) 
      { 
       string databaseFile = Path.Combine(Windows.ApplicationModel.Package.Current.InstalledLocation.Path, @"Common\MyDb.sqlite"); 
       StorageFile file = await StorageFile.GetFileFromPathAsync(databaseFile); 
       await file.CopyAsync(Windows.Storage.ApplicationData.Current.LocalFolder); 
      } 
     } 
    } 

데이터베이스 파일이 로컬 저장소 폴더에없는 경우에만 공용 폴더에서 파일을 복사합니다. 그런 다음 로컬 저장소의 파일을 사용하여 sqlite 연결을 만들 수 있습니다.

+0

이 코드를 사용하면 DoesFileExistAsync ("MyDb.sqlite") 결과가 현재 스레드를 차단하게되고 비동기가 아닙니다. –

0

프로젝트 폴더에이 "app_data"폴더를 만들었습니까? 앱 격리 저장소에 저장된 파일에만 직접 액세스 할 수 있기 때문에 또는 앱에서 액세스하기 전에 사용자가 파일 피커를 사용하여 파일을 선택해야하므로 작동하지 않습니다.

+0

그래, 나는 이것이 사실이라고 생각했다. 파일의 빌드 작업 속성을 Content로 설정하여 읽기 전용으로 설정할 수있었습니다. 내 경우에는 도움이 안돼. – Nitesh

1

한 가지 방법은 uri를 파일에 적용한 다음이를 사용하여 파일에 액세스하십시오.

var uri = new Uri("ms-appdata:///local/app_data/database.data"); 
var file = await StorageFile.GetFileFromApplicationUriAsync(uri); 

다른 접근법은 ApplicationData 클래스를 사용하는 것입니다.

var folder = await ApplictionData.Current.LocalFolder.GetFolderAsync("app_data"); 
var file = await folder.GetFileAsync("database.data"); 
0

비슷한 문제가있었습니다. 필자는 JSON을 생성하는 서비스를 받기 전에 중간 단계로 앱의 일부로 패키징 될 텍스트 파일에서 JSON을 읽어야했습니다. 이는 app_data 디렉토리에 JSON 파일에서 읽어

var file = await Package.Current.InstalledLocation.GetFileAsync("app_data\\tempjsonfile.json"); 
    String json = await FileIO.ReadTextAsync(file); 

을 : 로컬 저장이 여기에 답이 아니었다 사용

는 InstalledLocation는 건과 같이, 응용 프로그램의 일환으로 패키지 파일을 읽기 위해 사용하는 것입니다 나는 프로젝트에서 만들었다. Essential : JSON 파일의 속성에서 Build Action을 'Content'로 설정하고 Output Directory에 'Copy Always'로 설정하십시오.