C# 尝试删除独立存储中的目录时发生异常
在Windows Phone 7中尝试删除独立存储中的目录时,出现以下异常: 访问IsolatedStorage时出错。 内部没有例外C# 尝试删除独立存储中的目录时发生异常,c#,silverlight,windows-phone-7,isolatedstorage,C#,Silverlight,Windows Phone 7,Isolatedstorage,在Windows Phone 7中尝试删除独立存储中的目录时,出现以下异常: 访问IsolatedStorage时出错。 内部没有例外 using (var isf = IsolatedStorageFile.GetUserStoreForApplication()) { isf.DeleteDirectory(dir.TrimEnd('/')); } 注: 将其放入try-catch将隐藏异常,但仍不会删除目录! 在调用此函数之前,我使用DeleteFile删除了其中的所有文件,这样
using (var isf = IsolatedStorageFile.GetUserStoreForApplication())
{
isf.DeleteDirectory(dir.TrimEnd('/'));
}
注:
将其放入try-catch将隐藏异常,但仍不会删除目录!
在调用此函数之前,我使用DeleteFile删除了其中的所有文件,这样问题就不会与目录中的现有文件相关。
修剪目录名是为了确保它是一个有效的目录名。
有什么想法吗
谢谢。根据您的代码和描述,您将在每次迭代中重新创建IsolatedStorageFile访问 您应该发布所有代码,因为错误与您目前所说的内容无关。有关工作示例,请参见。如果你的目录名不符合要求,那么你显然是做错了什么
另外,我相信它使用反斜杠,而不是正斜杠作为路径,因此无论哪种方式,修剪都是毫无用处的。根据您的代码和描述,您将在每次迭代中重新创建IsolatedStorage文件访问 您应该发布所有代码,因为错误与您目前所说的内容无关。有关工作示例,请参见。如果你的目录名不符合要求,那么你显然是做错了什么
另外,我相信它使用反斜杠,而不是正斜杠作为路径,所以无论哪种方式,修剪都是无用的。好的,问题解决了,问题是文件没有被正确删除。我感到困惑的原因是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('\\'));
}
注:
文件路径中的“\”和“/”之间没有区别
删除目录时需要trimEnd,否则引发的异常路径必须是有效的文件名。
GetFileNames和GetDirectoryNames只返回名称部分,而不返回完整路径。因此,为了使用每个结果,您需要将其与本例中的目录DeleteFile相结合
好的,问题解决了,问题是文件没有被正确删除。我感到困惑的原因是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('\\'));
}
注:
文件路径中的“\”和“/”之间没有区别
删除目录时需要trimEnd,否则引发的异常路径必须是有效的文件名。
GetFileNames和GetDirectoryNames只返回名称部分,而不返回完整路径。因此,为了使用每个结果,您需要将其与本例中的目录DeleteFile相结合
多亏了valipour,我解决了这个问题
foreach (var file in isf.GetFileNames(dir))
{
isf.DeleteFile(dir + file);
}
在我的例子中,变量dir是images。为了获取images目录中的所有文件名,您应该使用isf.GetFileNamesimages/*多亏了valipour,我解决了这个问题
foreach (var file in isf.GetFileNames(dir))
{
isf.DeleteFile(dir + file);
}
在我的例子中,变量dir是images。为了获得images目录中的所有文件名,您应该使用isf.GetFileNamesimages/*获取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;
}
}
抓取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;
}
}
内部异常中有详细信息吗?是否100%确定dir.TrimEnd“/”生成有效的目录名?没有内部异常,修剪是为了确保dir是有效的目录名100%确定需要使用IsolatedStorageFile.DirectoryExisti我正在使用.GetDirectoryNames读取目录名。这够确定吗PNO没有存在的那么确定。为什么要修剪?它更改了名称。内部异常中有详细信息吗?是否100%确定dir.TrimEnd“/”生成有效的目录名?没有内部异常,修剪是为了确保dir是有效的目录名100%确定需要使用IsolatedStorageFile.DirectoryExisti我正在使用.GetDirectoryNames读取目录名。这够确定吗PNO没有存在的那么确定。为什么要修剪?它会更改名称。1在任何windows操作系统中,反斜杠和正斜杠在文件路径中的处理方式相同。2在不修剪的情况下,I get path必须是有效的文件名1在任何windows操作系统中,反斜杠和正斜杠在文件路径中的处理方式相同。2在不修剪的情况下,我得到的路径必须是有效的文件名