• c#中对文件进行解压同时进行解压后的数据操作


      这两天用c#做了一个数据处理的小程序,现在对这个程序以及程序中出现的问题做一个简单的总结。

      程序描述:该程序主要功能是,对压缩文件进行解压,随后对解压后的文件进行分析,将特定格式的数据取出放在特定的文件夹中。

      思路:首先将程序进行分析,把需要用到的功能单独拿出来进行操作(c#刚自学没多久,对很多功能都不熟悉);

      窗体界面:

          

      功能介绍:

        1、首先是点击“预览”键选择需要解压的文件,并将文件在textBox里面显示出来,使用的是OpenFileDialog类,code如下:

          OpenFileDialog ofl = new OpenFileDialog();

                    if  (ofl.ShowDialog ()==DialogResult .OK ){
                        textBox1.Text = ofl.FileName;

            }

        2、对选中的文件首先进行复制,使用的是FileInfo类,code如下:

           FileInfo f = new FileInfo(textBox1.Text);
                      //获取路径下的文件名
                      string text = Path.GetFileName(textBox1.Text);                 
                     //进行复制并对同名文件进行覆盖。

           f.CopyTo(@"D:资源copy" + text, true);

        3、对文件进行解压。c#主要是调用类库。根据不同的文件格式选择不同的类库。这里写几个这几天我了解的。

          对.zip文件的解压(开源):

                1)、微软在System.IO.Compression命名空间有一些关于文件解压缩的类,如果只是希望压缩解压zip和gzip格式的文件,是个不错的选择,在NET                Framework 4.5框架中,原生System.IO.Compression.FileSystem.dll程序集中新增了一个名为ZipFile的类,ZipFile的使用示例如下:

                    System.IO.Compression.ZipFile.CreateFromDirectory(@"e:	est", @"e:	est	est.zip"); //压缩
                    System.IO.Compression.ZipFile.ExtractToDirectory(@"e:	est	est.zip", @"e:	est"); //解压

                2)、SharpZipLib是一个很不错的C#库,它能够解压缩zip、gzip和tar格式的文件(我在使用是发现他对7-zip压缩文件进行解压是会报错),首先下载               SharpZipLib解压后,在您的项目中引用ICSharpCode.SharpZLib.dll程序集即可,示例代码如下:                

                    ZipOutputStream zipOutStream = new ZipOutputStream(File.Create("my.zip"));
                    CreateFileZipEntry(zipOutStream, "file1.txt", "file1.txt");
                    CreateFileZipEntry(zipOutStream, @"folder1folder2folder3file2.txt", "file2.txt");
                    zipOutStream.Close();
                    Directory.CreateDirectory("ZipOutPut");
                     ZipInputStream zipInputStream = new ZipInputStream(File.Open("my.zip", FileMode.Open));
                     ZipEntry zipEntryFromZippedFile = zipInputStream.GetNextEntry();
                     while (zipEntryFromZippedFile != null)
                       {
                         if (zipEntryFromZippedFile.IsFile)
                           {
                               FileInfo fInfo = new FileInfo(string.Format("ZipOutPut\{0}", zipEntryFromZippedFile.Name));
                               if (!fInfo.Directory.Exists) fInfo.Directory.Create();
    
                               FileStream file = fInfo.Create();
                               byte[] bufferFromZip = new byte[zipInputStream.Length];
                               zipInputStream.Read(bufferFromZip, 0, bufferFromZip.Length);
                               file.Write(bufferFromZip, 0, bufferFromZip.Length);
                               file.Close();
                           }
                         zipEntryFromZippedFile = zipInputStream.GetNextEntry();
                       }
                     zipInputStream.Close();

                 3)、SharpCompress的C#框架被开源,它支持:rar 7zip, zip, tar, tzip和bzip2格式的压缩和解压,下面的示例直接从rar格式文件读取并解压文件。

                    using (Stream stream = File.OpenRead(@"C:Codesharpcompress.rar"))

                      {

                          var reader = ReaderFactory.Open(stream);

                           while (reader.MoveToNextEntry())

                            {

                                if (!reader.Entry.IsDirectory

                                   {

                                    Console.WriteLine(reader.Entry.FilePath);

                                     reader.WriteEntryToDirectory(@"C: emp");

                                   }

                             }

                       }

              4)、上面这些是从网上总结的,自己的code如下:

               public static bool UnpackFiles(string file, string dir)
                      {
                          try
                         {
                                if (!Directory.Exists(dir))
                                {
                                    Directory.CreateDirectory(dir);
                                }
                              ZipInputStream s = new ZipInputStream(File.OpenRead(file));
                              ZipEntry theEntry;
                              while ((theEntry = s.GetNextEntry()) != null)
                              {
                                  string directoryName = Path.GetDirectoryName(theEntry.Name);
                                  string fileName = Path.GetFileName(theEntry.Name);
                                  if (directoryName != String.Empty)
                                  {
                                      Directory.CreateDirectory(dir + directoryName);
                                  }
                                 if (fileName != String.Empty)
                                 {
                                      FileStream streamWriter = File.Create(dir + theEntry.Name);
                                      int size = 2048;
                                      byte[] data = new byte[2048];
                                      while (true)
                                      {
                                          size = s.Read(data, 0, data.Length);
                                          if (size > 0)
                                          {
                                              streamWriter.Write(data, 0, size);
                                          }
                                            else
                                            {
                                                break;
                                            }
                                       }
                                      streamWriter.Close();
                                 }
                            }
                            s.Close();
                            return true;
                        }
                        catch (Exception )
                        {
                             throw;              
                        }
                    }

          4、对解压后的文件进行遍历,找出特定格式的文件进行复制放在特定的文件夹中,code 如下:

            /// <summary>
                  /// 遍历目录及其子目录找到自己想要的文件
                  /// </summary>
                  /// <param name="dirt">源文件路径</param>
                  /// <param name="dis">数据存储路径</param>
                  /// <param name="type">查找的格式" *.jpg"</param>
                  private static void Director(string dirt , string dis,string type)
                  {
                        DirectoryInfo dir = new DirectoryInfo(dirt);

                //下面第二个参数表示搜索包含子目录中的文件;
                        foreach (FileInfo file in dir.GetFiles(type, SearchOption.AllDirectories))
                        {
                              //如果已经有重名文件则对文件进行覆盖。
                              file.CopyTo(Path.Combine(dis, file.Name),true);
                        }
                  }

          

  • 相关阅读:
    selenium 学习(-)
    阿里百川SDK初始化失败 错误码是203
    sql-如何提高SQL查询的效率?
    索引失效原因总结
    索引失效原因总结
    sql-优化-大表关联小表
    sql-优化-大表关联小表
    C#-How to get series point info when mouse is over chartcontrol
    C#-How to get series point info when mouse is over chartcontrol
    C#-ILookup 初始化
  • 原文地址:https://www.cnblogs.com/zhaoguoying/p/9830628.html
Copyright © 2020-2023  润新知