private int Ext1File(FileStream fs, FileTableInf fti, string tgtDir) { //Print("生成:"+fti.archNm+"/"+System.IO.Path.GetDirectoryName(fti.fileNm)); if (!Directory.Exists(tgtDir + "/" + fti.archNm + "/" + Path.GetDirectoryName(fti.fileNm))) { Directory.CreateDirectory(tgtDir + "/" + fti.archNm + "/" + Path.GetDirectoryName(fti.fileNm)); } using (FileStream fw = File.Create(tgtDir + "/" + fti.archNm + "/" + fti.fileNm)) { byte[] tmpBuf = new byte[fti.compLen]; ReadFile(fs, tmpBuf, fti.dataPos, fti.compLen); if (fti.compLen == fti.deplLen) { nonCompExtnt.Add(Path.GetExtension(fti.fileNm)); fw.Write(tmpBuf, 0, fti.compLen); return(0); } IpfCrypt ic = new IpfCrypt(); //DumpBuf(tmpBuf, 32); ic.DecryptBuf(tmpBuf); //DumpBuf(tmpBuf, 32); using (Stream memStrm = new MemoryStream(tmpBuf)) { using (var deflStrm = new DeflateStream(memStrm, CompressionMode.Decompress)) { byte[] readBuf = new byte[4096]; int readSize = 0; for (int readPos = 0; ; readPos += readSize) { readSize = deflStrm.Read(readBuf, 0, readBuf.Length); if (readSize == 0) { break; } fw.Write(readBuf, 0, readSize); } } } } return(0); }