私は MonoTouch/MonoAndroid を試していましたが、IsolatedStorageFile.GetFileNames(string) 関数を呼び出すまではすべてうまくいっていました。パラメータは「Foo/Foo1/*」でした。結果は、メッセージのない SecurityException です。
IsolatedStorageFile.GetDirectoryNames() 呼び出しを使用して見つかったばかりのディレクトリ「Foo/Foo1」が存在します。
Mono ソースで例外をスローするこのビットを特定しました (IsolatedStorageFile.cs 内):
DirectoryInfo[] subdirs = directory.GetDirectories (path);
// we're looking for a single result, identical to path (no pattern here)
// we're also looking for something under the current path (not
outside isolated storage)
if ((subdirs.Length == 1) && (subdirs [0].Name == path) && (subdirs[0].FullName.IndexOf(directory.FullName) >= 0)) {
afi = subdirs [0].GetFiles (pattern);
} else {
// CAS, even in FullTrust, normally enforce IsolatedStorage
throw new SecurityException ();
}
デバッガーでステップインできないため、条件が false である理由がわかりません。これは、iOS と Android の両方で発生します。ずっと前に http://www.digipedia.pl/usenet/thread/12492/1724/#post1724に記録された同様の問題がありましたが、返信はありません。
同じコードが Windows Phone 7 でも問題なく動作します (パスの区切り記号として \ を使用)。
誰かがそれを引き起こしている可能性のあるアイデアを持っていますか? ディレクトリ名の大文字は問題ですか?