0
    public static async Task Store(ObservableCollection<Product> list)
    {
        Uri path = new Uri("ms-appx:///ListCollection.json");
        var store = await StorageFile.GetFileFromApplicationUriAsync(path);
        var stream = File.OpenWrite(store.Path);
        var serialize = new DataContractJsonSerializer(typeof(ObservableCollection<Product>));
        serialize.WriteObject(stream, list);


    }

これは、コレクションをシリアル化するために使用したコードの一部であり、非常にうまく機能しますが、問題はありませんが、私が望んで試してみましたが、成功しませんでした。プロジェクトに JSON ファイルを作成しました。そのファイルにデータを保存してストリーミングしたい。いくつかの方法を試しましたが成功しませんでした。現在プロジェクトにあるファイルへのストリームを開くにはどうすればよいですか?

EDITED : 動作しているコードにコメントし、私がやろうとしていることを書きました。ご支援ありがとうございます。

この列にたどり着いたら

var stream = File.OpenWrite(store.Path); それはアクセスできないと言います。

私がやろうとしているのは、いくつかのデータを ListCollection.json という名前のファイルにシリアライズすることです。これは emtpy です。そのファイルはプロジェクト ファイルです。それはストリームかもしれませんし、そのエラーを私に与えるファイルかもしれません。わかりません。

4

2 に答える 2

0

私はいくつかのドキュメントに目を通し、これに出くわしました: MSDN

アプリのインストール ディレクトリは読み取り専用の場所です。

ちょっとしたハックを利用しているリンクを見つけました。アプリケーションがデプロイされている場合などにこれが機能するかどうかはわかりませんが、これを試してファイルを書き込むことができます。ストリームが必要かどうかはわかりませんが、お気軽にコメントしてください。

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        ObservableCollection<string> list = new ObservableCollection<string>();
        list.Add("Hallo");
        list.Add("Welt");
        Task t = Store(list);
    }

    public static async Task Store(ObservableCollection<string> list)
    {
        StorageFile file = await GetStorageFileFromApplicationUriAsync();
        if (file == null)
        {
            file = await GetStorageFileFromFileAsync();
        }

        if (file != null)
        {
            await file.DeleteAsync();
            await CreateFileInInstallationLocation(list);
        }      
    }

    private static async Task<StorageFile> GetStorageFileFromFileAsync()
    {
        StorageFile file = null;
        if (file == null)
        {
            try
            {
                StorageFolder folder = Windows.ApplicationModel.Package.Current.InstalledLocation;
                file = await folder.GetFileAsync("ListCollection.json");
            }
            catch
            { }
        }
        return file;
    }

    private static async Task<StorageFile> GetStorageFileFromApplicationUriAsync()
    {
        StorageFile file = null;
        try
        {
            Uri path = new Uri("ms-appx:///ListCollection.json");
            file = await StorageFile.GetFileFromApplicationUriAsync(path);
        }
        catch
        { }
        return file;
    }

    private static async Task CreateFileInInstallationLocation(ObservableCollection<string> list)
    {
        var pkg = Windows.ApplicationModel.Package.Current;
        var installedLocationFolder = pkg.InstalledLocation;

        try
        {
            var file = await installedLocationFolder.CreateFileAsync("ListCollection.json", Windows.Storage.CreationCollisionOption.GenerateUniqueName);
            var filePath = file.Path;

            DataContractJsonSerializer serialize = new DataContractJsonSerializer(typeof(ObservableCollection<String>));
            using (Stream stream = await file.OpenStreamForWriteAsync())
            {
                serialize.WriteObject(stream, list);
                stream.Flush();
            }
        }
        catch (Exception ex)
        {
            var msg = ex.Message;
        }
    }

これが基本的に行うことは次のとおりです。

  1. ファイルを探す
  2. ファイルを削除する
  3. 新しいファイルを作成する
  4. JSON をファイルに書き込みます

私は本当にこの問題の専門家ではありません. インストール ディレクトリへの書き込みを回避できる場合は、Frank J が提案した方法を使用してください。

于 2015-08-10T21:34:26.897 に答える
0

私の推測では、プロジェクト ファイルはアプリケーションのインストール ディレクトリにあり、私が知る限り、そのディレクトリに書き込むことはできません。

必要なプロジェクト ファイルをアプリケーション データ ディレクトリに書き込む配置アクションをソリューションに配置する必要があります。そこに書き込めるはずです。

于 2015-08-10T20:14:20.387 に答える