using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ClearDirectory
{
public class ClearTool
{
/// <summary>
/// 清空目录或文件
/// </summary>
public static void ClearDelet(string path)
{
if (File.Exists(path)) ClearDeletFile(path);
if (Directory.Exists(path)) ClearDeletDirectory(path);
}
/// <summary>
/// 先清空目录中的所有文件和子目录内容,再删除当前目录
/// </summary>
public static void ClearDeletDirectory(string dir)
{
if (Directory.Exists(dir))
{
// 清除目录下的所有文件
foreach (String iteam in Directory.GetFiles(dir))
{
ClearDeletFile(iteam);
}
// 清除目录下的所有子目录
foreach (String iteam in Directory.GetDirectories(dir))
{
ClearDeletDirectory(iteam);
}
String newName = System.IO.Directory.GetParent(dir).FullName + "\\$";
while (File.Exists(newName)) newName += "$";
// 清除当前目录
Directory.Move(dir, newName); // 重命名当前目录,清除目录名信息
Directory.Delete(newName); // 清除当前目录
}
}
/// <summary>
/// 先清空文件内容,再删除
/// </summary>
public static void ClearDeletFile(string file)
{
ClearFile(file); // 清空文件内容
if (File.Exists(file))
{
String newName = System.IO.Directory.GetParent(file).FullName + "\\$";
while (File.Exists(newName)) newName += "$";
File.Move(file, newName); // 重命名文件,清除文件名称信息
File.Delete(newName); // 删除文件
}
}
/// <summary>
/// 清空文件内容
/// </summary>
public static void ClearFile(string file)
{
if (File.Exists(file))
{
int SIZE = 1024 * 10240;
byte[] array = new byte[SIZE];
array.Initialize();
FileStream s = new FileStream(file, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite, SIZE, FileOptions.RandomAccess);
// 清空原有文件内容
while (s.Position + SIZE <= s.Length - 1)
{
s.Write(array, 0, SIZE);
}
int reminds = (int)(s.Length - s.Position);
if (reminds > 0) s.Write(array, 0, reminds);
// 清除文件长度信息
s.SetLength(0);
s.Close();
}
}
}
}