コード例 #1
0
        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);
        }