递归删除特定目录和文件

时间:2017-03-31 09:20:19

标签: c# .net

我想删除以下mainDir中的特定目录。

public readonly DirectoryInfo mainDir = new DirectoryInfo("C:\Export\DataFiles\");

mainDir可能包含子目录,子目录可能包含更多目录......

我只获取带有完整路径的文件名。我想删除文件的所有父目录(包括文件),但不删除主目录。有什么更好的方法呢?

示例文件:

C:\Export\DataFiles\20392\483928\292833\file1.txt
C:\Export\DataFiles\20392\483928\292833\file2.txt

在这里,我想删除C:\ Export \ DataFiles \ 20392

C:\Export\DataFiles\3222\file1.txt

在这里,我想删除C:\ Export \ DataFiles \ 3222

C:\Export\DataFiles\4342\425622\file1.txt
C:\Export\DataFiles\4342\425622\file2.txt
C:\Export\DataFiles\4342\425622\file3.txt

在这里,我想删除C:\ Export \ DataFiles \ 4342

修改

我不能使用以下内容:

mainDir.delete(true);

它将删除mainDir中的所有目录和文件。

2 个答案:

答案 0 :(得分:4)

这称为"通过目录树"进行操作。一个相当简单的问题,通常通过递归来解决: https://msdn.microsoft.com/en-us/library/bb513869.aspx

"查找目录中的每个条目。如果它是一个目录本身,则递归到它。然后删除目录。删除您找到的所有非目录(文件)。"

获得文件的完整路径后,您可以将其删除。该代码可以找到目录树中所有文件和文件夹的完整路径。

答案 1 :(得分:1)

最简单的选择是使用Directory.Delete(folder_path, recursive: true)方法。此方法将以递归方式删除所有子目录,包括它们包含的文件(如果递归设置为true)。

此外,您需要根据您始终要删除的文件夹获取正确的路径。为此,您可以使用RegexString.Split()。由于您要删除的基本文件夹始终具有相同的名称,因此在拆分路径字符串后通过检查此名称可以轻松实现此目的。

我写的一个实现:

string folderToSplitOn = "DataFiles";

// Split your input string to detect from which path to delete
string path = @"C:\Export\DataFiles\20392\483928\292833\file1.txt";
string[] splittedString = path.Split('\\');

// Assuming you want to split from DataFiles, loop through your splitted results like this
string pathToDeleteFrom = null;
for (int i = 0; i < splittedString.Length; i++)
{
    pathToDeleteFrom += splittedString[i] + @"\";

    // It's now equal to the folder you want to delete from. Add the extra folder and finish
    if (splittedString[i].Equals(folderToSplitOn))
    {
        pathToDeleteFrom += splittedString[i + 1] + @"\";
        break;
    }
}

// Now you can delete all files and subfolders
Directory.Delete(pathToDeleteFrom, true);