我想删除以下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中的所有目录和文件。
答案 0 :(得分:4)
这称为"通过目录树"进行操作。一个相当简单的问题,通常通过递归来解决: https://msdn.microsoft.com/en-us/library/bb513869.aspx
"查找目录中的每个条目。如果它是一个目录本身,则递归到它。然后删除目录。删除您找到的所有非目录(文件)。"
获得文件的完整路径后,您可以将其删除。该代码可以找到目录树中所有文件和文件夹的完整路径。
答案 1 :(得分:1)
最简单的选择是使用Directory.Delete(folder_path, recursive: true)方法。此方法将以递归方式删除所有子目录,包括它们包含的文件(如果递归设置为true)。
此外,您需要根据您始终要删除的文件夹获取正确的路径。为此,您可以使用Regex
或String.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);