zoukankan      html  css  js  c++  java
  • FTP操作/Passive/Active控制

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Text;
      4 using System.IO;
      5 using System.Net;
      6 using System.Globalization;
      7 using System.IO.Compression;
      8 using ICSharpCode.SharpZipLib.Zip;
      9 using ICSharpCode.SharpZipLib.GZip;
     10 using ICSharpCode.SharpZipLib.Tar;
     11 
     12 namespace ClassProject.FTP
     13 {
     14     class FtpWeb
     15     {
     16         string ftpServerIP;
     17         string ftpRemotePath;
     18         string ftpUserID;
     19         string ftpPassword;
     20         string ftpURI;
     21         /// <summary>
     22         /// 连接FTP
     23         /// </summary>
     24         /// <param name="FtpServerIP">FTP连接地址</param>
     25         /// <param name="FtpRemotePath">指定FTP连接成功后的当前目录, 如果不指定即默认为根目录</param>
     26         /// <param name="FtpUserID">用户名</param>
     27         /// <param name="FtpPassword">密码</param>
     28         public FtpWeb(string FtpServerIP, string FtpRemotePath, string FtpUserID, string FtpPassword)
     29         {
     30             ftpServerIP = FtpServerIP;
     31             ftpRemotePath = FtpRemotePath;
     32             ftpUserID = FtpUserID;
     33             ftpPassword = FtpPassword;
     34             ftpURI = "ftp://" + ftpServerIP + "/";
     35         }
     36         //测试用例--已成功
     37         //static void Main()
     38         //{ 
     39         //    FtpWeb fw = new FtpWeb(@"xxxxxx/FTPFile", @"C:UsersAdministratorDesktopdic", "user", "password");
     40         //    string[] a = fw.NEWGetFileList(@"FTPFile");
     41         //    string path = @"C:UsersAdministratorDesktop新建文件夹";
     42         //    string X = "START:";
     43         //    for (int i = 0; i < a.Length; i++)
     44         //    {
     45         //            fw.Download(path, a[i].ToString(),'Active');
     46         //            fw.Delete(a[i].ToString());
     47         //            X += a[i] + "、";
     48         //    }
     49         //    Console.WriteLine("x");
     50         //    Console.ReadLine();
     51         //}
     52         //上传文件
     53         public string UploadFile(string[] filePaths)
     54         {
     55             StringBuilder sb = new StringBuilder();
     56             if (filePaths != null && filePaths.Length > 0)
     57             {
     58                 foreach (var file in filePaths)
     59                 {
     60                     sb.Append(Upload(file, "Active"));
     61                 }
     62             }
     63             return sb.ToString();
     64         }
     65         /// <summary>
     66         /// 上传文件
     67         /// </summary>
     68         /// <param name="filename"></param>
     69         public string  Upload(string filename,string type)
     70         {
     71             FileInfo fileInf = new FileInfo(filename);
     72             if (!fileInf.Exists)
     73             {
     74                 return filename + " 不存在!
    ";
     75             }
     76             string uri = ftpURI + fileInf.Name;
     77             FtpWebRequest reqFTP;
     78             reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
     79             reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
     80             reqFTP.KeepAlive = false;
     81             reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
     82             reqFTP.UseBinary = true;
     83             if (type=="Active")
     84             {
     85                 reqFTP.UsePassive = false; //选择主动
     86             }
     87             else
     88             {
     89                 reqFTP.UsePassive = true; //选择被动模式  
     90             }
     91             
     92             //Entering Passive Mode
     93             reqFTP.ContentLength = fileInf.Length;
     94             int buffLength = 2048;
     95             byte[] buff = new byte[buffLength];
     96             int contentLen;
     97             FileStream fs = fileInf.OpenRead();
     98             try
     99             {
    100                 Stream strm = reqFTP.GetRequestStream();
    101                 contentLen = fs.Read(buff, 0, buffLength);
    102                 while (contentLen != 0)
    103                 {
    104                     strm.Write(buff, 0, contentLen);
    105                     contentLen = fs.Read(buff, 0, buffLength);
    106                 }
    107                 strm.Close();
    108                 fs.Close();
    109             }
    110             catch (Exception ex)
    111             {
    112                 return "同步 " + filename + "时连接不上服务器!
    ";
    113                 //Insert_Standard_ErrorLog.Insert("FtpWeb", "Upload Error --> " + ex.Message);
    114             }
    115             return "";
    116         }
    117         /// <summary>
    118         /// 下载
    119         /// </summary>
    120         /// <param name="filePath"></param>
    121         /// <param name="fileName"></param>
    122         public void Download(string filePath, string fileName, string type)
    123         {
    124             FtpWebRequest reqFTP;
    125             try
    126             {
    127                 FileStream outputStream = new FileStream(filePath + "\" + fileName, FileMode.Create);
    128                 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + fileName));
    129                 reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
    130                 reqFTP.UseBinary = true;
    131                 if (type == "Active")
    132                 {
    133                     reqFTP.UsePassive = false; //选择主动
    134                 }
    135                 else
    136                 {
    137                     reqFTP.UsePassive = true; //选择被动模式  
    138                 }
    139                 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
    140                 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
    141                 Stream ftpStream = response.GetResponseStream();
    142                 long cl = response.ContentLength;
    143                 int bufferSize = 2048;
    144                 int readCount;
    145                 byte[] buffer = new byte[bufferSize];
    146                 readCount = ftpStream.Read(buffer, 0, bufferSize);
    147                 while (readCount > 0)
    148                 {
    149                     outputStream.Write(buffer, 0, readCount);
    150                     readCount = ftpStream.Read(buffer, 0, bufferSize);
    151                 }
    152                 ftpStream.Close();
    153                 outputStream.Close();
    154                 response.Close();
    155             }
    156             catch (Exception ex)
    157             {
    158                 // Insert_Standard_ErrorLog.Insert("FtpWeb", "Download Error --> " + ex.Message);
    159             }
    160         }
    161         /// <summary>
    162         /// 删除文件
    163         /// </summary>
    164         /// <param name="fileName"></param>
    165         public void Delete(string fileName, string type)
    166         {
    167             try
    168             {
    169                 string uri = ftpURI + fileName;
    170                 FtpWebRequest reqFTP;
    171                 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
    172                 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
    173                 reqFTP.KeepAlive = false;
    174                 if (type == "Active")
    175                 {
    176                     reqFTP.UsePassive = false; //选择主动
    177                 }
    178                 else
    179                 {
    180                     reqFTP.UsePassive = true; //选择被动模式  
    181                 }
    182                 reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;
    183                 string result = String.Empty;
    184                 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
    185                 long size = response.ContentLength;
    186                 Stream datastream = response.GetResponseStream();
    187                 StreamReader sr = new StreamReader(datastream);
    188                 result = sr.ReadToEnd();
    189                 sr.Close();
    190                 datastream.Close();
    191                 response.Close();
    192             }
    193             catch (Exception ex)
    194             {
    195                 //Insert_Standard_ErrorLog.Insert("FtpWeb", "Delete Error --> " + ex.Message + " 文件名:" + fileName);
    196             }
    197         }
    198 
    199         /// <summary>
    200         /// 删除文件
    201         /// </summary>
    202         /// <param name="srcPath">文件的路径</param>
    203         public void DelectDir(string srcPath)
    204         {
    205             try
    206             {
    207                 DirectoryInfo dir = new DirectoryInfo(srcPath);
    208                 FileSystemInfo[] fileinfo = dir.GetFileSystemInfos();  //返回目录中所有文件和子目录
    209                 foreach (FileSystemInfo i in fileinfo)
    210                 {
    211                     if (i is DirectoryInfo)            //判断是否文件夹
    212                     {
    213                         DirectoryInfo subdir = new DirectoryInfo(i.FullName);
    214                         subdir.Delete(true);          //删除子目录和文件
    215                     }
    216                     else
    217                     {
    218                         File.Delete(i.FullName);      //删除指定文件
    219                     }
    220                 }
    221             }
    222             catch (Exception e)
    223             {
    224                 throw;
    225             }
    226         }
    227 
    228         /// <summary>
    229         /// 获取当前目录下明细(包含文件和文件夹)
    230         /// </summary>
    231         /// <returns></returns>
    232         public string[] GetFilesDetailList()
    233         {
    234             string[] downloadFiles;
    235             try
    236             {
    237                 StringBuilder result = new StringBuilder();
    238                 FtpWebRequest ftp;
    239                 ftp = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI));
    240                 ftp.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
    241                 ftp.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
    242                 WebResponse response = ftp.GetResponse();
    243                 StreamReader reader = new StreamReader(response.GetResponseStream());
    244                 string line = reader.ReadLine();
    245                 line = reader.ReadLine();
    246                 line = reader.ReadLine();
    247                 while (line != null)
    248                 {
    249                     result.Append(line);
    250                     result.Append("
    ");
    251                     line = reader.ReadLine();
    252                 }
    253                 result.Remove(result.ToString().LastIndexOf("
    "), 1);
    254                 reader.Close();
    255                 response.Close();
    256                 return result.ToString().Split('
    ');
    257             }
    258             catch (Exception ex)
    259             {
    260                 downloadFiles = null;
    261                 //Insert_Standard_ErrorLog.Insert("FtpWeb", "GetFilesDetailList Error --> " + ex.Message);
    262                 return downloadFiles;
    263             }
    264         }
    265         /// <summary>
    266         /// 获取当前目录下文件列表(仅文件)
    267         /// </summary>
    268         /// <returns></returns>
    269         public string[] GetFileList(string mask, string type)
    270         {
    271             string[] downloadFiles;
    272             StringBuilder result = new StringBuilder();
    273             FtpWebRequest reqFTP;
    274             try
    275             {
    276                 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI));
    277                 reqFTP.UseBinary = true;
    278                 if (type == "Active")
    279                 {
    280                     reqFTP.UsePassive = false; //选择主动
    281                 }
    282                 else
    283                 {
    284                     reqFTP.UsePassive = true; //选择被动模式  
    285                 }
    286                 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
    287                 reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
    288                 WebResponse response = reqFTP.GetResponse();
    289                 StreamReader reader = new StreamReader(response.GetResponseStream());
    290                 string line = reader.ReadLine();
    291                 while (line != null)
    292                 {
    293                     if (mask.Trim() != string.Empty && mask.Trim() != "*.*")
    294                     {
    295                         string mask_ = mask.Substring(0, mask.IndexOf("*"));
    296                         if (line.Substring(0, mask_.Length) == mask_)
    297                         {
    298                             result.Append(line);
    299                             result.Append("
    ");
    300                         }
    301                     }
    302                     else
    303                     {
    304                         result.Append(line);
    305                         result.Append("
    ");
    306                     }
    307                     line = reader.ReadLine();
    308                 }
    309                 result.Remove(result.ToString().LastIndexOf('
    '), 1);
    310                 reader.Close();
    311                 response.Close();
    312                 return result.ToString().Split('
    ');
    313             }
    314             catch (Exception ex)
    315             {
    316                 downloadFiles = null;
    317                 if (ex.Message.Trim() != "远程服务器返回错误: (550) 文件不可用(例如,未找到文件,无法访问文件)。")
    318                 {
    319                     //Insert_Standard_ErrorLog.Insert("FtpWeb", "GetFileList Error --> " + ex.Message.ToString());
    320                 }
    321                 return downloadFiles;
    322             }
    323         }
    324         /// <summary>
    325         /// 获取当前目录下文件列表(仅文件)
    326         /// </summary>
    327         /// <returns></returns>
    328         public string[] NEWGetFileList(string mask,string type)
    329         {
    330             string[] downloadFiles;
    331             StringBuilder result = new StringBuilder();
    332             FtpWebRequest reqFTP;
    333             try
    334             {
    335                 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI));
    336                 reqFTP.UseBinary = true;
    337                 if (type == "Active")
    338                 {
    339                     reqFTP.UsePassive = false; //选择主动
    340                 }
    341                 else
    342                 {
    343                     reqFTP.UsePassive = true; //选择被动模式  
    344                 }
    345                 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
    346                 reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
    347                 WebResponse response = reqFTP.GetResponse();
    348                 StreamReader reader = new StreamReader(response.GetResponseStream());
    349                 string line = reader.ReadLine();
    350                 while (line != null)
    351                 {
    352                     if (mask.Trim() != string.Empty && mask.Trim() != "*.*")
    353                     {
    354                         result.Append(line);
    355                         result.Append("
    ");
    356                     }
    357                     line = reader.ReadLine();
    358                 }
    359                 result.Remove(result.ToString().LastIndexOf('
    '), 1);
    360                 reader.Close();
    361                 response.Close();
    362                 return result.ToString().Split('
    ');
    363             }
    364             catch (Exception ex)
    365             {
    366                 downloadFiles = null;
    367                 if (ex.Message.Trim() != "远程服务器返回错误: (550) 文件不可用(例如,未找到文件,无法访问文件)。")
    368                 {
    369                     //Insert_Standard_ErrorLog.Insert("FtpWeb", "GetFileList Error --> " + ex.Message.ToString());
    370                 }
    371                 return downloadFiles;
    372             }
    373         }
    374         /// <summary>
    375         /// 获取当前目录下所有的文件夹列表(仅文件夹)
    376         /// </summary>
    377         /// <returns></returns>
    378         public string[] GetDirectoryList()
    379         {
    380             string[] drectory = GetFilesDetailList();
    381             string m = string.Empty;
    382             foreach (string str in drectory)
    383             {
    384                 if (str.Trim().Substring(0, 1).ToUpper() == "D")
    385                 {
    386                     m += str.Substring(54).Trim() + "
    ";
    387                 }
    388             }
    389             char[] n = new char[] { '
    ' };
    390             return m.Split(n);
    391         }
    392         /// <summary>
    393         /// 判断当前目录下指定的子目录是否存在
    394         /// </summary>
    395         /// <param name="RemoteDirectoryName">指定的目录名</param>
    396         public bool DirectoryExist(string RemoteDirectoryName)
    397         {
    398             string[] dirList = GetDirectoryList();
    399             foreach (string str in dirList)
    400             {
    401                 if (str.Trim() == RemoteDirectoryName.Trim())
    402                 {
    403                     return true;
    404                 }
    405             }
    406             return false;
    407         }
    408         /// <summary>
    409         /// 判断当前目录下指定的文件是否存在
    410         /// </summary>
    411         /// <param name="RemoteFileName">远程文件名</param>
    412         public bool FileExist(string RemoteFileName)
    413         {
    414             string[] fileList = GetFileList("*.*", "Active");
    415             foreach (string str in fileList)
    416             {
    417                 if (str.Trim() == RemoteFileName.Trim())
    418                 {
    419                     return true;
    420                 }
    421             }
    422             return false;
    423         }
    424         /// <summary>
    425         /// 创建文件夹
    426         /// </summary>
    427         /// <param name="dirName"></param>
    428         public void MakeDir(string dirName)
    429         {
    430             FtpWebRequest reqFTP;
    431             try
    432             {
    433                 // dirName = name of the directory to create.
    434                 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + dirName));
    435                 reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
    436                 reqFTP.UseBinary = true;
    437                 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
    438                 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
    439                 Stream ftpStream = response.GetResponseStream();
    440                 ftpStream.Close();
    441                 response.Close();
    442             }
    443             catch (Exception ex)
    444             {
    445                 //Insert_Standard_ErrorLog.Insert("FtpWeb", "MakeDir Error --> " + ex.Message);
    446             }
    447         }
    448         /// <summary>
    449         /// 创建文件
    450         /// </summary>
    451         /// <param name="dirName"></param>
    452         /// <param name="interfaceLocation"></param> 
    453         /// <param name="fileName"></param>
    454         public string SavaProcess(string fileName, string dirName,string FilePath)
    455         {
    456             
    457             //判断路径是否存在
    458             if (!System.IO.Directory.Exists(FilePath))
    459             {
    460                 System.IO.Directory.CreateDirectory(FilePath);
    461             }
    462             //不存在就创建
    463             FilePath = FilePath + "//" + fileName ;
    464             //文件覆盖方式添加内容
    465             System.IO.StreamWriter file = new System.IO.StreamWriter(FilePath, false);
    466             //保存数据到文件
    467             file.Write(dirName);
    468             //关闭文件
    469             file.Close();
    470             //释放对象
    471             file.Dispose();
    472             return FilePath;
    473         }
    474         /// <summary>
    475         /// 获取指定文件大小
    476         /// </summary>
    477         /// <param name="filename"></param>
    478         /// <returns></returns>
    479         public long GetFileSize(string filename)
    480         {
    481             FtpWebRequest reqFTP;
    482             long fileSize = 0;
    483             try
    484             {
    485                 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + filename));
    486                 reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;
    487                 reqFTP.UseBinary = true;
    488                 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
    489                 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
    490                 Stream ftpStream = response.GetResponseStream();
    491                 fileSize = response.ContentLength;
    492                 ftpStream.Close();
    493                 response.Close();
    494             }
    495             catch (Exception ex)
    496             {
    497                 //Insert_Standard_ErrorLog.Insert("FtpWeb", "GetFileSize Error --> " + ex.Message);
    498             }
    499             return fileSize;
    500         }
    501         /// <summary>
    502         /// 改名
    503         /// </summary>
    504         /// <param name="currentFilename"></param>
    505         /// <param name="newFilename"></param>
    506         public void ReName(string currentFilename, string newFilename)
    507         {
    508             FtpWebRequest reqFTP;
    509             try
    510             {
    511                 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + currentFilename));
    512                 reqFTP.Method = WebRequestMethods.Ftp.Rename;
    513                 reqFTP.RenameTo = newFilename;
    514                 reqFTP.UseBinary = true;
    515                 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
    516                 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
    517                 Stream ftpStream = response.GetResponseStream();
    518                 ftpStream.Close();
    519                 response.Close();
    520             }
    521             catch (Exception ex)
    522             {
    523                 //Insert_Standard_ErrorLog.Insert("FtpWeb", "ReName Error --> " + ex.Message);
    524             }
    525         }
    526         /// <summary>
    527         /// 移动文件
    528         /// </summary>
    529         /// <param name="currentFilename"></param>
    530         /// <param name="newFilename"></param>
    531         public void MovieFile(string currentFilename, string newDirectory)
    532         {
    533             ReName(currentFilename, newDirectory);
    534         }
    535         /// <summary>
    536         /// 将数据写入文本文件中
    537         /// </summary>
    538         /// <param name="Filename"></param>
    539         /// <param name="FileDate"></param>
    540         public void WriteFile(string Filename, string FileDate)
    541         {
    542             //传入文本文件的名称,并将数据写入到文本文件中。
    543             FileStream fs = new FileStream(Filename, FileMode.OpenOrCreate, FileAccess.ReadWrite);
    544             StreamWriter sw = new StreamWriter(fs); // 创建写入流
    545             sw.WriteLine(FileDate); // 写入数据
    546             sw.Close(); //关闭文件
    547             Console.WriteLine("OK");
    548             Console.ReadKey();
    549 
    550         }
    551 
    552         /// <summary>  
    553         /// zip压缩文件  
    554         /// </summary>  
    555         /// <param name="filename">filename生成的文件的名称,如:C123123.zip</param>  
    556         /// <param name="directory">directory要压缩的文件夹路径</param>  
    557         /// <returns></returns>  
    558         public bool PackFiles(string filename, string directory)
    559         {
    560             try
    561             {
    562                 directory = directory.Replace("/", "\");
    563 
    564                 if (!directory.EndsWith("\"))
    565                     directory += "\";
    566                 if (!Directory.Exists(directory))
    567                 {
    568                     Directory.CreateDirectory(directory);
    569                 }
    570                 if (File.Exists(filename))
    571                 {
    572                     File.Delete(filename);
    573                 }
    574 
    575                 FastZip fz = new FastZip();
    576                 fz.CreateEmptyDirectories = true;
    577                 fz.CreateZip(filename, directory, true, "");
    578 
    579                 return true;
    580             }
    581             catch (Exception)
    582             {
    583                 return false;
    584             }
    585         }
    586 
    587         /// <summary>  
    588         /// gzip压缩文件  
    589         /// </summary>  
    590         /// <param name="filename">需要进行压缩的文件</param>  
    591         /// <param name="nowfilename">压缩后的文件的名字</param>  
    592         /// <returns></returns>  
    593         public void GPackFiles(string filename, string nowfilename)
    594         {
    595             using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
    596             {
    597                 //创建写入流
    598                 using (FileStream save = new FileStream(nowfilename, FileMode.Create, FileAccess.Write))
    599                 {
    600                     //创建包含写入流的压缩流
    601                     using (GZipStream gs = new GZipStream(save, CompressionMode.Compress))
    602                     {
    603                         //创建byte[]数组中转数据
    604                         byte[] b = new byte[1024 * 1024];
    605                         int count = 0;
    606                         //循环将读取流中数据写入到byte[]数组中
    607                         while ((count = fs.Read(b, 0, b.Length)) > 0)
    608                         {
    609                             //将byte[]数组中数据写入到压缩流
    610                             gs.Write(b, 0, b.Length);
    611                         }
    612                     }
    613                 }
    614             }
    615 
    616         }
    617 
    618         /// <summary>  
    619         /// gzip压缩文件  
    620         /// </summary>  
    621         /// <param name="filePath">需要进行压缩的文件</param>  
    622         /// <param name="zipFilePath">压缩后的文件的名字</param>  
    623         /// <returns></returns>  
    624         public void gZipFile(string filePath, string zipFilePath)
    625         {
    626             Stream s = new GZipOutputStream(File.Create(zipFilePath));
    627             FileStream fs = File.OpenRead(filePath);
    628             int size;
    629             byte[] buf = new byte[4096];
    630             do
    631             {
    632                 size = fs.Read(buf, 0, buf.Length);
    633                 s.Write(buf, 0, size);
    634             } while (size > 0);
    635             s.Close();
    636             fs.Close();
    637         }
    638 
    639         public  string Zip(string value)
    640         {
    641             //Transform string into byte[]
    642             byte[] byteArray = new byte[value.Length];
    643             int indexBA = 0;
    644             foreach (char item in value.ToCharArray())
    645             {
    646                 byteArray[indexBA++] = (byte)item;
    647             }
    648             //Prepare for compress
    649             System.IO.MemoryStream ms = new System.IO.MemoryStream();
    650             System.IO.Compression.GZipStream sw = new System.IO.Compression.GZipStream(ms,System.IO.Compression.CompressionMode.Compress);
    651             //Compress
    652             sw.Write(byteArray, 0, byteArray.Length);
    653             //Close, DO NOT FLUSH cause bytes will go missing...
    654             sw.Close();
    655             //Transform byte[] zip data to string
    656             byteArray = ms.ToArray();
    657             System.Text.StringBuilder sB = new System.Text.StringBuilder(byteArray.Length);
    658             foreach (byte item in byteArray)
    659             {
    660                 sB.Append((char)item);
    661             }
    662             ms.Close();
    663             sw.Dispose();
    664             ms.Dispose();
    665             return sB.ToString();
    666         }
    667 
    668         public string Compress(string param)
    669         {
    670             byte[] data = System.Text.Encoding.UTF8.GetBytes(param);
    671             //byte[] data = Convert.FromBase64String(param);
    672             MemoryStream ms = new MemoryStream();
    673             Stream stream = new ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream(ms);
    674             try
    675             {
    676                 stream.Write(data, 0, data.Length);
    677             }
    678             finally
    679             {
    680                 stream.Close();
    681                 ms.Close();
    682             }
    683             return Convert.ToBase64String(ms.ToArray());
    684         }
    685 
    686         /// <summary>
    687         /// 解压
    688         /// </summary>
    689         /// <param name="param"></param>
    690         /// <returns></returns>
    691         public  string Decompress(string param)
    692         {
    693             string commonString = "";
    694             byte[] buffer = Convert.FromBase64String(param);
    695             MemoryStream ms = new MemoryStream(buffer);
    696             Stream sm = new ICSharpCode.SharpZipLib.BZip2.BZip2InputStream(ms);
    697             //这里要指明要读入的格式,要不就有乱码
    698             StreamReader reader = new StreamReader(sm, System.Text.Encoding.UTF8);
    699             try
    700             {
    701                 commonString = reader.ReadToEnd();
    702             }
    703             finally
    704             {
    705                 sm.Close();
    706                 ms.Close();
    707             }
    708             return commonString;
    709         }
    710 
    711         /// <summary>  
    712         /// tar压缩文件  
    713         /// </summary>  
    714         /// <param name="filename">filename生成的文件的名称,如:C123123.zip</param>  
    715         /// <param name="directory">directory要压缩的文件夹路径</param>  
    716         /// <returns></returns>  
    717         public void TarCreateFromStream(string filename , string directory)
    718         {
    719 
    720             // 创建输出流。不必是磁盘,可以是内存流等。
    721             string tarOutFn = filename;
    722             Stream outStream = File.Create(tarOutFn);
    723             TarOutputStream tarOutputStream = new TarOutputStream(outStream);
    724 
    725             CreateTarArchive(tarOutputStream, directory);
    726 
    727             // 关闭归档文件也关闭底层流。
    728             tarOutputStream.Close();
    729         }
    730 
    731         private  void CreateTarArchive(TarOutputStream tarOutputStream, string sourceDirectory)
    732         {
    733             // 可选地,为目录本身写一个条目。
    734             // TarEntry tarEntry = TarEntry.CreateEntryFromFile(sourceDirectory);
    735             // tarOutputStream.PutNextEntry(tarEntry);
    736             // 将每个文件写入tar。
    737             string[] filenames = Directory.GetFiles(sourceDirectory);
    738 
    739             foreach (string filename in filenames)
    740             {
    741                 using (Stream inputStream = File.OpenRead(filename))
    742                 {
    743                     int idxStart = filename.LastIndexOf('\') + 1;
    744                     string tarName = filename.Substring(idxStart, filename.Length - idxStart);
    745                     long fileSize = inputStream.Length;
    746                     TarEntry entry = TarEntry.CreateTarEntry(tarName);
    747 
    748                     // 必须设置大小,否则当输出超过时,TAROutPutsFipe将失败。
    749                     entry.Size = fileSize;
    750 
    751                     // 在写入数据之前,将条目添加到TAR流中。
    752                     tarOutputStream.PutNextEntry(entry);
    753 
    754                     // 这是从TracSovi.Read EngyCype复制的
    755                     byte[] localBuffer = new byte[32 * 1024];
    756                     while (true)
    757                     {
    758                         int numRead = inputStream.Read(localBuffer, 0, localBuffer.Length);
    759                         if (numRead <= 0)
    760                         {
    761                             break;
    762                         }
    763                         tarOutputStream.Write(localBuffer, 0, numRead);
    764                     }
    765                 }
    766                 tarOutputStream.CloseEntry();
    767             }
    768             // 递归。如果不需要就删除。
    769             //string[] directories = Directory.GetDirectories(sourceDirectory);
    770             //foreach (string directory in directories)
    771             //{
    772             // CreateTarArchive(tarOutputStream, directory);
    773             //}
    774         }
    775 
    776     }
    777 }
  • 相关阅读:
    游戏开发制作流程详细介绍
    成为群体领袖
    别人的,值得借鉴的经验
    linux下iptabes配置详解
    Oracle tnsnames.ora
    同时展多个物料BOM List
    Oracle判断是否为数字或数字型字符串
    linux上的vnc配置
    Oracle 中的正则函数
    如何将 backordered 的SO# 重新发运?
  • 原文地址:https://www.cnblogs.com/Zingu/p/10688668.html
Copyright © 2011-2022 走看看