読者です 読者をやめる 読者になる 読者になる

WindowsPhone開発で分離ストレージにゴミを残していませんか?

さて、WP7向けプログラミングTips 第4弾です・・・・・・と思ったのですが、もう少し進んだ部分でアウトプットしたい事も増えてきたので、そっちを先に。多くの方が来月末のアプリコンテスト狙ってると思うので、急いだほうがいいでしょう。(笑)

今日は分離ストレージについて。使ってる事前提で。

自分もだったのですが、Listboxに突っ込む画像を分離ストレージに一時キャッシュしたりすると何かと便利です。しかし、分離ストレージの中を除いてみるとゴミが残りまくりでした。もちろん削除処理は書いてるのですが、あっちこっちからの出入りが激しい(書いてる人にはわかる表現)ので順調に抜けが出ますよね、そりゃ。

一方、IsolatedStorageFileのメソッドには領域全消去のRemoveしかなく、ディレクトリ単位で消そうとしてもファイルが残ってるとエラーになります。そんなわけで、その辺を埋めるクラスです。

public static void CleenDirectory(string directory, string filePattern)
{
using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication())
{
//そんなディレクトリ無かったら無視
if (!isoStore.DirectoryExists(directory)) return;
string path = System.IO.Path.Combine(directory, filePattern);
//まずファイル名列挙
string[] fileNames = isoStore.GetFileNames(path);
if (fileNames.Length > 0)
{
foreach (string s in fileNames)
{
//丁寧に連結
string pathCache = System.IO.Path.Combine(directory, s);
isoStore.DeleteFile(pathCache);
}
}
}
}

public const string cacheDirectory = "hoge";とかで自分の作ったディレクトリ名はわかってるでしょうから、CleenDirectory(cacheDirecroty, "*")って感じで呼んであげると特定ディレクトリ内を空にします。もしもっと発展的な事したい場合はここのGetAllDirectoriesやGetAllFilesを組み込んでみるといいでしょう。

今日は単に、「分離ストレージの中身は追いにくいせいで、開発者も気付いていない変なファイルをみんなの端末に残し続けちゃうから気をつけようね!」と言いたかったわけです。ではでは。