c# 复制 删除文件夹
之前需要复制和删除文件夹,就在网上找了一下,然后发现了这篇文章,虽然复制文件夹最后还是没用上,但是感觉还是有用的,先保存下来,以待后用。另外找到了其他的删除文件夹的方式,不需要做递归,也一并保存下来。
原文链接:https://blog.csdn.net/lxyruanjian/article/details/84012173
C#复制文件的时候只提供了复制文件的类,没有复制文件夹。
删除文件夹的时候,文件夹下面有文件的时候是不能删除的,需要先删除文件夹下面所有文件才能删除文件夹。
在网上找了很多资料,在这里记录一下这两个方法:
复制文件夹:
/// <summary>
/// 复制文件夹
/// </summary>
/// <param name="sourceFolder">待复制的文件夹</param>
/// <param name="destFolder">复制到的文件夹</param>
private void CopyFolder(string sourceFolder, string destFolder)
{
if (!Directory.Exists(destFolder))
{
Directory.CreateDirectory(destFolder);
}
string[] files = Directory.GetFiles(sourceFolder);
foreach (string file in files)
{
string name = Path.GetFileName(file);
string dest = Path.Combine(destFolder, name);
File.Copy(file, dest);
}
string[] folders = Directory.GetDirectories(sourceFolder);
foreach (string folder in folders)
{
string name = Path.GetFileName(folder);
string dest = Path.Combine(destFolder, name);
CopyFolder(folder, dest);
}
}
删除文件夹:
/// <summary>
/// C# 删除文件夹
/// </summary>
/// <param name="dir">删除的文件夹,全路径格式</param>
private void DeleteFolder(string dir)
{ // 循环文件夹里面的内容
foreach (string f in Directory.GetFileSystemEntries(dir))
{
// 如果是文件存在
if (File.Exists(f))
{
FileInfo fi = new FileInfo(f);
if (fi.Attributes.ToString().IndexOf("Readonly") != 1)
{
fi.Attributes = FileAttributes.Normal;
}
// 直接删除其中的文件
File.Delete(f);
}
else
{
// 如果是文件夹存在
// 递归删除子文件夹
DeleteFolder(f);
}
}
// 删除已空文件夹
Directory.Delete(dir);
}
我最后使用的:
/// <summary>
/// delete folder
/// </summary>
/// <param name="TempDirectory">folder name</param>
/// <returns></returns>
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(TempDirectory);
if (dir.Exists)
dir.Delete(true);