static void Extract(FileStream file, String destination, Dictionary <uint, string> filenameHashDict = null) { System.IO.Directory.CreateDirectory(destination); uint magic = file.ReadUInt32(); uint filecount = file.ReadUInt32(); var FileInfos = new S2ARHeaderFileInfo[filecount]; for (int i = 0; i < filecount; ++i) { FileInfos[i] = new S2ARHeaderFileInfo(); FileInfos[i].Hash = file.ReadUInt32(); FileInfos[i].Filesize = file.ReadUInt32(); } for (int i = 0; i < filecount; ++i) { string filename; if (filenameHashDict != null && filenameHashDict.ContainsKey(FileInfos[i].Hash)) { filename = System.IO.Path.Combine(destination, filenameHashDict[FileInfos[i].Hash]); } else { filename = System.IO.Path.Combine(destination, i.ToString("D4") + Util.GuessFileExtension(file)); } FileStream newFile = new FileStream(filename, FileMode.Create); StreamUtils.CopyStream(file, newFile, (int)FileInfos[i].Filesize); newFile.Close(); } return; }
static void Extract( FileStream file, String destination, Dictionary<uint, string> filenameHashDict = null ) { System.IO.Directory.CreateDirectory( destination ); uint magic = file.ReadUInt32(); uint filecount = file.ReadUInt32(); var FileInfos = new S2ARHeaderFileInfo[filecount]; for ( int i = 0; i < filecount; ++i ) { FileInfos[i] = new S2ARHeaderFileInfo(); FileInfos[i].Hash = file.ReadUInt32(); FileInfos[i].Filesize = file.ReadUInt32(); } for ( int i = 0; i < filecount; ++i ) { string filename; if ( filenameHashDict != null && filenameHashDict.ContainsKey( FileInfos[i].Hash ) ) { filename = System.IO.Path.Combine( destination, filenameHashDict[FileInfos[i].Hash] ); } else { filename = System.IO.Path.Combine( destination, i.ToString( "D4" ) + Util.GuessFileExtension( file ) ); } FileStream newFile = new FileStream( filename, FileMode.Create ); Util.CopyStream( file, newFile, (int)FileInfos[i].Filesize ); newFile.Close(); } return; }