using System; using System.Collections.Generic; using System.IO; using System.Text; using ICSharpCode.SharpZipLib.Checksums; using ICSharpCode.SharpZipLib.Zip; namespace Tools { public class SharpZipHelper { /// <summary> /// 存放待壓縮的文件的絕對路徑 /// </summary> public List<string> AbsolutePaths { set; get; } public string ErrorMsg { set; get; } public SharpZipHelper() { ErrorMsg = ""; AbsolutePaths = new List<string>(); } /// <summary> /// 添加壓縮文件 /// </summary> /// <param name="fileAbsolutePath">文件的絕對路徑</param> public void AddFile(string fileAbsolutePath) { AbsolutePaths.Add(fileAbsolutePath); } /// <summary> /// 壓縮文件 /// </summary> /// <param name="zipedFilePath">壓縮后的文件(初始時不存在)</param> /// <param name="compressionLevel">壓縮級別</param> /// <param name="blockSize">每次寫入的內存大小</param> /// <returns></returns> public bool CompressionZip(string zipedFilePath, int compressionLevel, int blockSize) { bool result = true; FileStream fs = null; try { Encoding gbk = Encoding.GetEncoding("gbk"); // 防止中文名亂碼 ICSharpCode.SharpZipLib.Zip.ZipConstants.DefaultCodePage = gbk.CodePage; FileStream ZipFile = File.Create(zipedFilePath); // 創建壓縮文件 ZipOutputStream ZipStream = new ZipOutputStream(ZipFile); ZipStream.SetLevel(compressionLevel); // 設置壓縮級別 foreach (string path in AbsolutePaths) { //如果是目錄 if (Directory.Exists(path)) { ZipFloder(path, ZipStream, path); } else if (File.Exists(path))//如果是文件 { fs = File.OpenRead(path); //fs = new FileStream(path, FileMode.Open, FileAccess.Read); // 讀取需壓縮的文件 //byte[] bts = new byte[fs.Length]; //fs.Read(bts, 0, bts.Length); ZipEntry ze = new ZipEntry(new FileInfo(path).Name); ZipStream.PutNextEntry(ze); //為壓縮文件流提供一個容器 byte[] bts = new byte[blockSize]; int size = fs.Read(bts, 0, bts.Length); // 每次讀入指定大小 ZipStream.Write(bts, 0, size); while (size < fs.Length) // 保證文件被全部寫入 { int sizeRead = fs.Read(bts, 0, bts.Length); ZipStream.Write(bts, 0, sizeRead); size += sizeRead; } //ZipStream.Write(bts, 0, bts.Length); //寫入字節 } } ZipStream.Finish(); // 結束壓縮 ZipStream.Close(); fs.Close(); } catch (Exception ex) { if (fs != null) { fs.Close(); } ErrorMsg = ex.Message; result = false; } return result; } /// <summary> /// 壓縮文件夾 /// </summary> /// <param name="ofloderPath">要壓縮的文件目錄</param> /// <param name="zos">壓縮后的文件</param> /// <param name="floderPath">壓縮后存放的文件目錄</param> private void ZipFloder(string ofloderPath, ZipOutputStream zos, string floderPath) { Crc32 crc = new Crc32(); Encoding gbk = Encoding.GetEncoding("gbk"); // 防止中文名亂碼 ICSharpCode.SharpZipLib.Zip.ZipConstants.DefaultCodePage = gbk.CodePage; foreach (FileSystemInfo item in new DirectoryInfo(floderPath).GetFileSystemInfos()) { if (Directory.Exists(item.FullName)) { ZipFloder(ofloderPath, zos, item.FullName); } else if (File.Exists(item.FullName))//如果是文件 { DirectoryInfo oDir = new DirectoryInfo(ofloderPath); string fullName2 = new FileInfo(item.FullName).FullName; string path = oDir.Name + fullName2.Substring(oDir.FullName.Length, fullName2.Length - oDir.FullName.Length);//獲取相對目錄 FileStream fs = File.OpenRead(fullName2); byte[] bts = new byte[fs.Length]; fs.Read(bts, 0, bts.Length); ZipEntry ze = new ZipEntry(path); ze.DateTime = DateTime.Now; ze.Size = fs.Length; fs.Close(); crc.Reset(); crc.Update(bts); ze.Crc = crc.Value; zos.PutNextEntry(ze); //為壓縮文件流提供一個容器 zos.Write(bts, 0, bts.Length); //寫入字節 } } } /// <summary> /// 解壓 /// </summary> /// <param name="depositPath">壓縮文件路徑</param> /// <param name="fileDir">解壓的路徑</param> /// <returns></returns> public bool DeCompressionZip(string depositPath, string fileDir) { bool result = true; FileStream fs = null; try { Encoding gbk = Encoding.GetEncoding("gbk"); // 防止中文名亂碼 ICSharpCode.SharpZipLib.Zip.ZipConstants.DefaultCodePage = gbk.CodePage; ZipInputStream inpStream = new ZipInputStream(File.OpenRead(depositPath.Trim())); ZipEntry ze;//獲取壓縮文件中的每一個文件 Directory.CreateDirectory(fileDir);//創建解壓文件夾 while ((ze = inpStream.GetNextEntry()) != null)//如果解壓完ze則是null { if (ze.IsFile)//壓縮zipINputStream里面存的都是文件。帶文件夾的文件名字是文件夾\\文件名 { string[] strs = ze.Name.Split('\\');//如果文件名中包含’\\‘則表明有文件夾 if (strs.Length > 1) { //兩層循環用於一層一層創建文件夾 for (int i = 0; i < strs.Length - 1; i++) { string floderPath = fileDir; for (int j = 0; j < i; j++) { floderPath = floderPath + "\\" + strs[j]; } floderPath = floderPath + "\\" + strs[i]; Directory.CreateDirectory(floderPath); } } fs = new FileStream(fileDir + "\\" + ze.Name, FileMode.OpenOrCreate, FileAccess.Write);//創建文件 //循環讀取文件到文件流中 while (true) { byte[] bts = new byte[2048]; int i = inpStream.Read(bts, 0, bts.Length); if (i > 0) { fs.Write(bts, 0, i); } else { break; } } fs.Flush(); fs.Close(); } } inpStream.Close(); } catch (Exception ex) { if (fs != null) { fs.Close(); } ErrorMsg = ex.Message; result = false; } return result; } } }
參考:
http://blog.csdn.net/e295166319/article/details/52824235 使用C#壓縮解壓zip格式文件
http://www.open-open.com/lib/view/open1389773696961.html C#解壓或壓縮文件夾
http://www.cnblogs.com/Bonker/archive/2012/12/25/2831970.html C#中關於zip壓縮解壓幫助類的封裝
http://blog.sina.com.cn/s/blog_45eaa01a0102x7if.html C#獲取文件夾下的所有文件的文件名
String path = @"X:\xxx\xxx"; //第一種方法 var files = Directory.GetFiles(path, "*.txt"); foreach (var file in files) Console.WriteLine(file); //第二種方法 DirectoryInfo folder = new DirectoryInfo(path); foreach (FileInfo file in folder.GetFiles("*.txt")) { Console.WriteLine(file.FullName); }
C#獲取文件夾下的所有文件的文件名
//C#遍歷指定文件夾中的所有文件 DirectoryInfo TheFolder=new DirectoryInfo(folderFullName); //遍歷文件夾 foreach(DirectoryInfo NextFolder in TheFolder.GetDirectories()) this.listBox1.Items.Add(NextFolder.Name); //遍歷文件 foreach(FileInfo NextFile in TheFolder.GetFiles()) this.listBox2.Items.Add(NextFile.Name);
1. DirectoryInfo.GetFiles():獲取目錄中(不包含子目錄)的文件,返回類型為FileInfo[],支持通配符查找;
2. DirectoryInfo.GetDirectories():獲取目錄(不包含子目錄)的子目錄,返回類型為DirectoryInfo[],支持通配符查找;
3. DirectoryInfo. GetFileSystemInfos():獲取指定目錄下(不包含子目錄)的文件和子目錄,返回類型為FileSystemInfo[],支持通配符查找;
如何獲取指定文件的基本信息;
FileInfo.Exists:獲取指定文件是否存在;
FileInfo.Name,FileInfo.Extensioin:獲取文件的名稱和擴展名;
FileInfo.FullName:獲取文件的全限定名稱(完整路徑);
FileInfo.Directory:獲取文件所在目錄,返回類型為DirectoryInfo;
FileInfo.DirectoryName:獲取文件所在目錄的路徑(完整路徑);
FileInfo.Length:獲取文件的大小(字節數);
FileInfo.IsReadOnly:獲取文件是否只讀;
FileInfo.Attributes:獲取或設置指定文件的屬性,返回類型為FileAttributes枚舉,可以是多個值的組合
FileInfo.CreationTime、FileInfo.LastAccessTime、FileInfo.LastWriteTime:分別用於獲取文件的創建時間、訪問時間、修改時間;
http://developer.51cto.com/art/200908/144236.htm C#刪除指定文件兩種方法
using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Collections; /// 〈 summary〉 /// 刪除目錄再創建相同目錄 /// 〈 /summary〉 /// 〈 param name="strDir"〉目錄地址 〈 /param〉 public static void deleteFiles( string strDir) { if (Directory.Exists(strDir)) { Directory.Delete(strDir, true); Directory.CreateDirectory(strDir); Console.WriteLine("文件刪除成功!"); } else { Console.WriteLine("此目錄不存在!"); } }
/// 〈 summary〉 /// 直接刪除目錄下的所有文件及文件夾(保留目錄) /// 〈 /summary〉 /// 〈 param name="strDir"〉目錄地址 〈 /param〉 public static void deleteFiles3( string strDir) { if (Directory.Exists(strDir)) { string[] strDirs = Directory.GetDirectories(strDir); string[] strFiles = Directory.GetFiles(strDir); foreach (string strFile in strFiles) { File.Delete(strFile); } foreach (string strdir in strDirs) { Directory.Delete(strdir, true); } Console.WriteLine("刪除成功!"); } else { Console.WriteLine("此目錄不存在!"); } }
//C# 查找指定文件夾下指定后綴名的所有文件 public void GetFiles(string dir) { try { string[] files = Directory.GetFiles(dir);//得到文件 foreach (string file in files)//循環文件 { string exname = file.Substring(file.LastIndexOf(".") + 1);//得到后綴名 // if (".txt|.aspx".IndexOf(file.Substring(file.LastIndexOf(".") + 1)) > -1)//查找.txt .aspx結尾的文件 if (".txt".IndexOf(file.Substring(file.LastIndexOf(".") + 1)) > -1)//如果后綴名為.txt文件 { FileInfo fi = new FileInfo(file);//建立FileInfo對象 alst.Add(fi.FullName);//把.txt文件全名加人到FileInfo對象 } } } catch { } } private static string result = ""; /// <summary> /// 得某文件夾下所有的文件 /// </summary> /// <param name="directory">文件夾名稱</param> /// <param name="pattern">搜尋指類型</param> /// <returns></returns> public static string GetFiles(DirectoryInfo directory, string pattern) { if(directory.Exists || pattern.Trim()!=string.Empty) { foreach(FileInfo info in directory.GetFiles(pattern)) { result = result + info.FullName.ToString() + ";"; //result = result + info.Name.ToString() + ";"; } foreach(DirectoryInfo info in directory.GetDirectories()) { GetFiles(info,pattern); } } string returnString = result; return returnString; } //GetFiles(new DirectoryInfo(@"D:\TestGetFiles\TestGetFiles\xiaobaigang"),"*.txt");
