第一步,上次文件并保存到服务器目录下
/// <summary> /// 上传压缩文件 /// </summary> protected void UploadZip() { //定义上传文件暂存目录 string uploadDic = @"C:\Test\"; //判断是否选择文件 if (FileUpload1.FileName.Length > 0) { //判断文件格式 if (FileUpload1.FileName.EndsWith(".zip")) { //判断上传文件目录是否存在 if (!Directory.Exists(uploadDic)) { //不存在则创建该目录 Directory.CreateDirectory(uploadDic); } //在服务器上存储压缩文件 FileUpload1.SaveAs(uploadDic + FileUpload1.FileName); UnpackZip(uploadDic + FileUpload1.FileName, uploadDic + FileUpload1.FileName.Substring(0, FileUpload1.FileName.Length - 4) + @"\"); } } }
第二步,解压该文件并创建临时文件目录,需引用外部组件ICSharpCode.SharpZipLib.dll
/// <summary> /// 解压文件 /// </summary> /// <param name="zipDir">压缩文件目录</param> /// <param name="fileDir">解压目录</param> /// <returns></returns> protected void UnpackZip(string zipDir, string fileDir) { try { //创建解压文件目录 if (!Directory.Exists(fileDir)) { Directory.CreateDirectory(fileDir); } //创建Zip输出流 ZipInputStream zipStream = new ZipInputStream(File.OpenRead(zipDir)); ZipEntry theEntry; //逐级打开压缩文件 while ((theEntry = zipStream.GetNextEntry()) != null) { //获取打开目录的名称 string dirName = Path.GetDirectoryName(theEntry.Name); //获取文件的名称 string fileName = Path.GetFileName(theEntry.Name); if (dirName != String.Empty) { //根据目录名称创建新的目录 Directory.CreateDirectory(fileDir + dirName); } if (fileName != String.Empty) { //写入文件内容 FileStream fileSteam = File.Create(fileDir + theEntry.Name); int size = 2048; byte[] data = new byte[size]; while (true) { size = zipStream.Read(data, 0, data.Length); if (size > 0) { fileSteam.Write(data, 0, size); } else { break; } } fileSteam.Close(); } } zipStream.Close(); //读取解压文件 ReadDirectory(fileDir); //删除解压目录 DeleteTempDirectory(fileDir); } catch (Exception e) { throw new IOException("文件内容异常"+e.Message); } }
第三步,读取临时文件内容
/// <summary> /// 读取解压文件内容 /// </summary> /// <param name="fileDir">解压目录</param> protected void ReadDirectory(string fileDir) { //获取解压文件下所有文件 string[] files = Directory.GetFiles(fileDir); if (files.Count() > 0) { //循环获取文件 foreach (string file in files) { //如果是XML则 //XmlDocument doc = new XmlDocument(); //doc.Load(file); //获取单个文件 Directory.GetFiles(file); //读取文件进行数据处理... } } }
第四步,删除临时目录
/// <summary> /// 删除临时解压目录 /// </summary> /// <param name="fileDir"></param> protected void DeleteTempDirectory(string fileDir) { if (Directory.Exists(fileDir)) { //删除该目录及该目录下的所有文件 Directory.Delete(fileDir, true); } }