C# 尝试删除独立存储中的目录时发生异常

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删除了其中的所有文件,这样

在Windows Phone 7中尝试删除独立存储中的目录时,出现以下异常:

访问IsolatedStorage时出错。 内部没有例外

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在不修剪的情况下,我得到的路径必须是有效的文件名