我正在尝试 MonoTouch/MonoAndroid,一切都很顺利,直到我调用了 IsolatedStorageFile.GetFileNames(string) 函数。参数是“Foo/Foo1/*”。结果是没有消息的 SecurityException。
目录“Foo/Foo1”存在,因为它刚刚被使用 IsolatedStorageFile.GetDirectoryNames() 调用找到。
我在引发异常的 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 ();
}
我无法使用调试器进入它,所以我不知道为什么条件为假。这在 iOS 和 Android 上都会发生。很久以前在 http://www.digipedia.pl/usenet/thread/12492/1724/#post1724上记录了一个类似的问题,但没有回复。
相同的代码在 Windows Phone 7 上运行没有问题(使用 \ 作为路径分隔符)。
有没有人知道可能是什么原因造成的?目录名称中的大写字母有问题吗?