当我尝试删除Windows Phone 7中隔离存储中的目录时,出现以下异常:
访问IsolatedStorage时发生错误 没有内在的例外。
using (var isf = IsolatedStorageFile.GetUserStoreForApplication())
{
isf.DeleteDirectory(dir.TrimEnd('/'));
}
注意:
有什么想法吗?
感谢。
答案 0 :(得分:6)
好的,问题解决了,问题是文件没有被正确删除。我感到困惑的原因是,当您删除无效文件时,IsolatedStorageFile类不会警告您。这是正确的代码和一些注释:
public static void DeleteDirectoryRecursive(this IsolatedStorageFile isf, string dir)
{
foreach (var file in isf.GetFileNames(dir))
{
isf.DeleteFile(dir + file);
}
foreach (var subdir in isf.GetDirectoryNames(dir))
{
isf.DeleteDirectoryRecursive(dir + subdir + "\\");
}
isf.DeleteDirectory(dir.TrimEnd('\\'));
}
注意:
答案 1 :(得分:1)
根据您的代码和描述,您将在每次迭代时重新创建IsolatedStorageFile访问权限?
您应该发布所有代码,因为错误与您到目前为止所说的内容无关。至于一个工作示例,请参阅this blog post。如果它失败了您的目录名称,那么您显然做错了。
另外,我相信它使用反斜杠,而不是路径的正斜杠,所以你的Trim()无论如何都会变得无用。
答案 2 :(得分:1)
`public static void DeleteDirectoryRecursive(string directory, IsolatedStorageFile store)
{
if (!store.DirectoryExists(directory))
return;
var pattern = Path.Combine(directory, "*");
foreach (var file in store.GetFileNames(pattern))
{
store.DeleteFile(Path.Combine(directory, file));
}
foreach (var folder in store.GetDirectoryNames(pattern))
{
DeleteDirectoryRecursive(Path.Combine(directory, folder), store);
}
store.DeleteDirectory(directory);
}`
答案 3 :(得分:0)
感谢valipour,我解决了问题
foreach (var file in isf.GetFileNames(dir))
{
isf.DeleteFile(dir + file);
}
在我的例子中,变量dir是“images”。要获取“images”目录中的所有文件名,您应该使用isf.GetFileNames("images/*")
答案 4 :(得分:0)
抓住Valipour的版本,让它发挥作用。添加了一些检查以提高稳定性+修复了一些名称。这对Lumia 920有用。
private void DeleteDirectoryRecursive(string dir)
{
if (String.IsNullOrEmpty(dir)) return;
try
{
using (var isoFiles = IsolatedStorageFile.GetUserStoreForApplication())
{
foreach (var file in isoFiles.GetFileNames(dir + "\\*"))
{
var filename = dir + "/" + file;
if (isoFiles.FileExists(filename))
isoFiles.DeleteFile(filename);
}
foreach (var subdir in isoFiles.GetDirectoryNames(dir))
{
var dirname = dir + subdir + "\\";
if (isoFiles.DirectoryExists(dirname))
DeleteDirectoryRecursive(dirname);
}
var currentDirname = dir.TrimEnd('\\');
if (isoFiles.DirectoryExists(currentDirname))
isoFiles.DeleteDirectory(currentDirname);
}
}
catch (Exception e)
{
throw;
}
}