c# 指定目录批量压缩文件
2012-06-19 15:38
483 查看
//以下代码可以实现从指定目录批量压缩文件
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);
}
//
}
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);
}
//
}
相关文章推荐
- c# 从指定目录批量压缩文件
- 续:C# 趣味小程序(4)——遍历特定目录及其子目录 (应用实例,压缩指定目录下的所有文件)
- shell 批量压缩指定目录及子目录内图片的方法
- C# 遍历指定目录下的所有文件及文件夹
- C#遍历文件(夹)、读取tar.gz格式压缩文件,从文件名提取信息批量入数据库
- python 按指定规则批量删除多级目录中的文件
- C#直接删除指定目录下的所有文件及文件夹(保留目录)
- C#将文件从指定的目录复制到另一个目录
- python打包压缩、读取指定目录下的指定类型文件
- 用C#列出指定目录下的所有指定扩展名(多个扩展名)的文件
- [No000073]C#直接删除指定目录下的所有文件及文件夹(保留目录)
- c#操作文件夹压缩到指定目录和解压到指定目录
- C# 获取指定目录下所有文件信息、移动目录、拷贝目录
- python实现指定目录下批量文件的单词计数:串行版本
- C# ZIP 目录文件压缩
- 压缩指定目录下指定文件(包括子目录下的文件)
- linux tar (打包.压缩.解压缩)命令说明 | tar如何解压文件到指定的目录?
- C#读取指定目录下的config文件
- c#读取指定目录的所有文件
- python实现指定目录下批量文件的单词计数:串行版本