初めての Windows Phone 8 アプリを作成していて、簡単なことを試しています。ファイルの読み取り/書き込み。ここに私の2つの方法があります:
public static async Task<Week> Load()
{
StorageFolder folder = ApplicationData.Current.LocalFolder;
try
{
StorageFile mealsFile = await folder.GetFileAsync("file.txt");
if (mealsFile != null)
{
using (var stream = await mealsFile.OpenAsync(FileAccessMode.Read))
{
var serializer = new DataContractSerializer(typeof(List<MyTypeHere>));
var w = (List<MyTypeHere>)serializer.ReadObject(stream.AsStreamForRead());
if (w != null)
MyWeek.WeekList = new ObservableCollection<MyTypeHere>(w);
}
}
}
catch(FileNotFoundException fEx)
{
MyWeek = new Week();
}
return MyWeek;
}
public static async Task<bool> Save()
{
try
{
StorageFolder folder = ApplicationData.Current.LocalFolder;
StorageFile mealsFile = await folder.CreateFileAsync("file.txt", CreationCollisionOption.ReplaceExisting);
using (var stream = await mealsFile.OpenAsync(FileAccessMode.ReadWrite))
{
using (var sw = stream.GetOutputStreamAt(0))
{
var serializer = new DataContractSerializer(typeof(List<MyTypeHere>));
serializer.WriteObject(sw.AsStreamForWrite(), MyWeek.WeekList.ToList());
await sw.FlushAsync();
}
}
MyWeek = null;
return true;
}
catch(Exception ex)
{
return false;
}
}
Save を呼び出して (ブレークポイントを使用すると正常に動作します)、次に Load を呼び出して (ブレークポイントを使用) ファイルをロードすると、ファイルが存在し、オブジェクト グラフにデータが入力されます。
アプリを閉じて再起動すると、FileNotFoundException の catch がキャッチされます。なんで?
私が見ることができることから、ローカルフォルダーはファイルを永続化するはずです。私が見逃しているのは、明らかに明白なはずです...
ありがとう
編集:
Windows Phone エミュレーターを使用していますが、それを閉じて Visual Studio で F5 キーを押すと、ファイルがなくなりました。