//以下代码可以实现从指定目录批量压缩文件
public static string GetFoldAll(string Path)
{
string str = "";
DirectoryInfo thisOne = new DirectoryInfo(Path);
DirectoryInfo[] subDirectories = thisOne.GetDirectories();//获得目录
for (int i = 0; i < subDirectories.Length; i++)
{
str = ListTreeShow(subDirectories[i], 0, str);
}
return str;
}
/// <summary>
/// 获取指定文件夹下所有子目录及文件函数
/// </summary>
/// <param name="theDir">指定目录</param>
/// <param name="nLevel">默认起始值,调用时,一般为0</param>
/// <param name="Rn">用于迭加的传入值,一般为空</param>
/// <returns></returns>
public static string ListTreeShow(DirectoryInfo theDir, int nLevel, string Rn)//递归目录 文件
{
try
{
DirectoryInfo[] subDirectories = theDir.GetDirectories();//获得目录
foreach (DirectoryInfo dirinfo in subDirectories)
{
FileInfo[] fileInfo = dirinfo.GetFiles(); //目录下的文件
foreach (FileInfo fInfo in fileInfo)
{
string filepath = dirinfo.FullName + "\\" + fInfo.Name;
//时间部分判断 文件是否删除
string suffix = "";
DateTime dt = DateTime.Now;
string[] fielName = fInfo.Name.Split('.');
string linedate = fielName[0].Split('_')[fielName[0].Split('_').Length - 1];//获取文件名称中的时间部分
if (fielName.Length > 2)
{
suffix = fielName[2];
}
else
{
suffix = fielName[1];
}
if (linedate == "rev")
{
dt = DateTime.ParseExact(fielName[0].Split('_')[fielName[0].Split('_').Length - 2], "yyyyMMdd", null);
}
else
{
dt = DateTime.ParseExact(linedate, "yyyyMMdd", null);
}
DateTime time = DateTime.Now;
if (dt < time.AddYears(-1))//以当前时间为基础,早于一年的报表删掉
{
DeleteFile(filepath);
}
if (dt.AddDays(1) < time)
{
if (suffix == "txt" || suffix == "csv")
{
ZipIt(filepath);
DeleteFile(filepath);
}
}
}
Rn = ListTreeShow(dirinfo, nLevel + 1, Rn);
}
}
catch (Exception ex)
{
log.Info(ex);
}
return Rn;
}
private static String ZipIt(String filename)
{
ZipFile zipfile = new ZipFile(System.Text.Encoding.Default);
string zipname = "";
try
{
//压缩文件
zipfile.AddFile(filename, "");
zipfile.Save(filename + ".zip");
Console.WriteLine("zip the file: {0} success!", filename);
string[] fname = zipfile.Name.Split('\\');
zipname = fname[fname.Length - 1];
}
catch (Exception ex)
{
log.Info(ex);
Console.WriteLine("error occurred! ex={0}", ex);
//throw ex;
}
log.Info("文件压缩成功,文件名为:" + filename);
return zipname;
}
private static void DeleteFile(string txtedfolder)
{
//foreach (string file in Directory.GetFiles(zipedfolder))
//{
try
{
File.Delete(txtedfolder);
log.Info("成功删除" + txtedfolder);
}
catch (Exception ex)
{
Console.WriteLine(ex);
log.Info("删除文件失败:" + ex);
}
//
}