1

「App_Data」フォルダーを作成した Windows 8 ストア アプリがあります。sqlite データベース ファイルを追加しましたが、接続を作成するためのファイル パスを取得しようとしています。

4

4 に答える 4

3

既存の sqlite ファイルをプロジェクトの Common フォルダーに追加し、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 接続を作成できます。

于 2012-09-30T21:57:08.400 に答える
1

1 つの方法は、ファイルへの uri を作成し、それを使用してファイルにアクセスすることです。

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

もう 1 つの方法は、ApplicationData クラスを使用することです。

var folder = await ApplictionData.Current.LocalFolder.GetFolderAsync("app_data");
var file = await folder.GetFileAsync("database.data");
于 2012-09-28T21:27:12.233 に答える
0

この「app_data」フォルダーをプロジェクト フォルダーに作成しましたか? アプリの分離ストレージに保存されたファイルにのみ直接アクセスできるか、アプリでアクセスする前にユーザーがファイルピッカーを使用してファイルを選択する必要があるため、これは機能しません。

于 2012-09-28T19:09:14.560 に答える
0

私は同様の問題を抱えていました。JSON を生成するサービスを用意する前の中間ステップとして、アプリの一部としてパッケージ化されるテキスト ファイルから JSON を読み取る必要がありました。

LocalStorage を使用することはここでの答えではありませんでした。InstalledLocation は、次のように、アプリの一部としてパッケージ化されたファイルを読み取るために使用するものです。

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

これは、プロジェクトで作成した app_data ディレクトリの json ファイルから読み取ります。必須: JSON ファイルのプロパティで、[ビルド アクション] を [コンテンツ] に設定し、[出力ディレクトリにコピー] を [常にコピー] に設定します。

于 2013-01-13T19:10:50.287 に答える