日期:2014-05-17  浏览次数:20940 次

求救未处理IndexOutOfRangeException 索引超出了数组界限
public static bool UnZipFile(string zipFilePath, string unZipDir, out string err, string pw, string myFilename)
  {
  err = "";
  if (zipFilePath == string.Empty)
  {
  err = "压缩文件不能为空!";
  return false;
  }
  if (!File.Exists(zipFilePath))
  {
  err = "压缩文件不存在!";
  return false;
  }
  //解压文件夹为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹  
  if (unZipDir == string.Empty)
  unZipDir = zipFilePath.Replace(Path.GetFileName(zipFilePath), Path.GetFileNameWithoutExtension(zipFilePath));
  if (!unZipDir.EndsWith("//"))
  unZipDir += "//";
  if (!Directory.Exists(unZipDir))
  Directory.CreateDirectory(unZipDir);
   
  try
  {
  using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath)))
  {

  ZipEntry theEntry;
  while ((theEntry = s.GetNextEntry()) != null)
  {
  string directoryName = Path.GetDirectoryName(theEntry.Name);
  string fileName = Path.GetFileName(theEntry.Name);
  string cFileName =Path.GetFileNameWithoutExtension(zipFilePath);  

  //创建ZIP文件中的所有文件夹
  //if (directoryName.Length > 0)
  //{
  // Directory.CreateDirectory(unZipDir + directoryName);
  //}
  //if (!directoryName.EndsWith("//"))
  // directoryName += "//";  

  if (fileName != String.Empty)
  {
  if (fileName.Equals(myFilename))//找到相同的文件后解压
  {
  using (FileStream streamWriter = File.Create(unZipDir + cFileName+".txt"))
  {
  s.Password = pw;
  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;
  }
  }
  }
  }
  }
  }//while  
  }
  }
  catch (Exception ex)
  {
  err = ex.Message;
  re