首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

未处理IndexOutOfRangeException 索引超出了数组界限

2012-09-15 
求救未处理IndexOutOfRangeException 索引超出了数组界限public static bool UnZipFile(string zipFilePat

求救未处理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;
  return false;
  }
  return true;
  }//解压结束 




  private void but_Run_Click(object sender, EventArgs e)
  {
  DateTime st = Convert.ToDateTime( this.dTPStart.Value.ToShortDateString());
  DateTime en = Convert.ToDateTime(this.dTPEnd.Value.ToShortDateString());
   
  int d_count = 0;
  String path = @"Z:\diaglog";
  String path2 = @"D:\tmp";
  String barcodelist = @"D:\barcodelist.txt";
  String err ;

  string[] directories = Directory.GetDirectories(path);
  d_count = directories.Length;

  StreamWriter sw = new StreamWriter(barcodelist);
  int myi = 0;
  for (int index = 0; index < d_count; index++)
{
DateTime cu = Convert.ToDateTime(Directory.GetCreationTime(directories[index]));
  if ((st.CompareTo(cu)<=0) && (en.CompareTo(cu)>=0))
  {
  sw.WriteLine(directories[index]);
  //获取下一级目录z:\diaglog\barcode\12082914.10\......
  string[] nextdirectories = Directory.GetDirectories(directories[index]);
  for (int i = 0; i < nextdirectories.Length; i++)
  {
  //MessageBox.Show(nextdirectories[i]);//这里只是获得了z:\diaglog\barcode\12082914.10\

  DirectoryInfo dir = new DirectoryInfo(@nextdirectories[i]);

  FileInfo[] fi = dir.GetFiles("*.zip");
  //MessageBox.Show(fi[0].FullName.ToString());
  UnZipFile(fi[0].FullName.ToString(), path2, out err, "dell", "err"); 会在这里报错:未处理IndexOutOfRangeException 索引超出了数组界限  
  }
  myi++;

  //MessageBox.Show(myi.ToString());
  }  
}
  sw.Close();

  }
  }
}

[解决办法]
你就不能再加个if吗?


热点排行