1

Windows Phoneアプリにリストボックスがあり、そのデータテンプレートには、質問、回答、日付、および電子メールIDを表す4つのテキストボックスコントロールがあります。

ユーザーがこのデータを保存するときに、後で同じデータをアプリに表示するために読み取ることができるように、ローカルストレージに保存したいと思います。したがって、isolatedstoragefileを使用して複数のデータセットをファイルに書き込む方法。各データセットには、各行に上記のデータ(質問、回答、日付、および電子メール)が含まれています。

そして、各レコードを読んでいる間、どのように各列(質問、回答、日付、emailid)を異なって読むのですか?書き込み中に連結し、各行を読み取るときに分割できることはわかっていますが、IsolatedstorageFile apiで、上記の方法で読み取る方法があるかどうかを知りたいと思います。

4

2 に答える 2

0

http://whydoidoit.com/のSilverlightSerializerを使用して、オブジェクトを分離されたストレージにシリアル化します。その本当に良いシリアライザー-その高速でそのファイルは小さいです。保存と取得に使用されるコードは

public static void SaveFile(string filename, object serializableObject, Type type)
    {
        using (IsolatedStorageFile userStore = IsolatedStorageFile.GetUserStoreForApplication())
        {
            if (userStore.FileExists(filename))
            {
                userStore.DeleteFile(filename);
            }

            using (IsolatedStorageFileStream stream = userStore.CreateFile(filename))
            {
                SilverlightSerializer.Serialize(serializableObject, stream);
            }
        }
    }

    public static object LoadSerializedObjectFromFile(string filename, Type type)
    {
        using (IsolatedStorageFile userStore =
          IsolatedStorageFile.GetUserStoreForApplication())
        {
            if (userStore.FileExists(filename))
            {
                using (IsolatedStorageFileStream stream = userStore.OpenFile(filename, FileMode.Open))
                {
                    return SilverlightSerializer.Deserialize(stream);
                }
            }
        }
        return null;
    }

私は通常、個々のファイルをリポジトリ(パターン)でラップします。たとえば、Good Dealアプリには、DealRepositoryがあります。そのリポジトリには、次のような静的なLoadメソッドがあります。

 private static IDeal LoadRecentDeal()
    {
        IDeal savedDeals = IsolatedStorageHelper.LoadSerializedObjectFromFile(RecentDealFileName, typeof(Deal)) as Deal;
        if (savedDeals != null)
        {
            return savedDeals;
        }
        else
        {
            return Deal.CreateNewDeal(RecentDealFileName);
        }
    }

内部保存メソッドは次のようなものです。

public void Save(IDeal deal)
    {
        deal.LastModifiedDate = DateTime.Now;

        // 
        string fileName;
        if (deal.Name == RecentDealFileName)
        {
            fileName = RecentDealFileName;
        }
        else
        {
            fileName = SavedDirectoryName + Path.DirectorySeparatorChar + deal.ID.ToString();
        }

        IsolatedStorageHelper.SaveFile(fileName, deal, typeof(IDeal));       
    }

また、IsolatedStorageHelperとリポジトリには、リストを複数のファイルに保存して返すなどの方法がいくつかあります。すべてニーズによって異なりますが、SilverlightSerializerを確認することをお勧めします。ものすごく単純。

于 2012-12-29T13:10:43.907 に答える
0

「通常の」ファイルの場合と同じように行います。

私はバイナリまたは XML シリアライゼーションの大ファンではないので、4 つのフィールドをセミコロンで区切り、各項目 (質問;回答;日付;メール ID) を新しい行に記述します。結果の文字列をファイルに保存します。

次に、読み取り時にファイル全体を文字列に読み取り、改行で分割すると、すべてのアイテムが取得されます。各行 (項目) をセミコロンで分割すると、4 つのフィールドが得られ、必要な型にキャストできます。

于 2012-12-29T12:47:31.320 に答える