c# 从指定目录批量压缩文件
2012-06-19 00:00
621 查看
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);
}
//
}
{
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);
}
//
}
相关文章推荐
- c# 指定目录批量压缩文件
- 续:C# 趣味小程序(4)——遍历特定目录及其子目录 (应用实例,压缩指定目录下的所有文件)
- c#winform选择文件,文件夹,打开指定目录方法
- C# 获取指定目录下所有文件信息、移动目录、拷贝目录
- C#上传文件到网站指定目录
- Python批量修改指定目录下的文件名和文件内容
- 批量复制文件到指定目录并执行.bat文件(2012.06.06)
- linux tar (打包.压缩.解压缩)命令说明 | tar如何解压文件到指定的目录?
- C# 获取指定目录下所有文件信息
- linux tar (打包.压缩.解压缩)命令说明 | tar如何解压文件到指定的目录?
- gzip压缩指定目录下的所有文件
- 批量删除当前目录下所有文件夹中的指定文件
- 提供下载:批量图片压缩(生成缩略图或指定大小图片)及文件批量改名器
- C# 获取指定目录下所有文件信息、删除文件、目录,移动目录,拷贝目录
- C# 打开指定目录并定位到文件
- C#将文件从指定的目录复制到另一个目录
- C#获取FTP目录下文件夹、文件的方法,进而判断FTP下指定文件夹是否存在
- C#递归搜索指定目录下的文件或目录
- C#删除指定目录的文件夹或者文件
- Linux系统下创建任务,对指定目录文件进行自动压缩存档