public void extract(string extFolder, bool timeoutSkip = false) { int OFFSET = 0; int INT_SIZE = (int)intf.Length; foreach (SectionInfo info in infos) { long DATA_OFF = info.dataOffset; BUFF_OFF = (int)DATA_OFF; long SIZE = getLong(BUFF_OFF); long ZSIZE = getLong(BUFF_OFF); OFFSET = BUFF_OFF; /*hoo boy * the clog * cloggy boy * hmmmmmmmmmmmmmmmm*/ intf.Seek(DATA_OFF, SeekOrigin.Begin); /*byte[] MEMORY_FILE = new byte[ZSIZE]; * intf.Read(MEMORY_FILE, 0, (int)ZSIZE); * //COPY THE ENTIRETY MY BOYO*/ //byte[] MEMORY_FILE = inta; //please help byte[] MEMORY_FILE = new byte[ZSIZE]; //byte[] TEMP_FILE = new byte[ZSIZE]; //intf.Read(TEMP_FILE, 0, (int)ZSIZE); intf.Read(MEMORY_FILE, 0, (int)ZSIZE); //Stream TEMP_STREAM = new MemoryStream(TEMP_FILE); //TEMP_STREAM = Decompress(TEMP_STREAM); //TEMP_STREAM.Read(MEMORY_FILE, 0, (int)SIZE); foreach (INTFile file in info.files) { OFFSET = (int)file.dataOffset; SIZE = file.size; string NAME = file.name; string FNAME = string.Format(@"\{0}\{1}", info.folderName, NAME); //the big EXPORT TIME //Console.WriteLine(extFolder + FNAME); if (!Directory.Exists(extFolder + @"\" + info.folderName)) { Directory.CreateDirectory(extFolder + @"\" + info.folderName); } //Console.WriteLine(OFFSET + " " + SIZE); Stream EXPORT; try { EXPORT = File.Open(extFolder + FNAME, FileMode.CreateNew); } catch (IOException) { EXPORT = File.Open(extFolder + FNAME, FileMode.Truncate); }; //Console.WriteLine(NAME); byte[] WRITTEN_FILE = new byte[SIZE]; EXPORT.Read(WRITTEN_FILE, (int)OFFSET, (int)SIZE); FileInfo fl = new FileInfo(extFolder + FNAME); int r = 0; bool c = false; long osz = 0; if (timeoutSkip) { while (fl.Length != SIZE) { fl.Refresh(); r++; if (fl.Length != osz) { r = 0; } if (r > 100000) { //Console.WriteLine(SIZE + " " + OFFSET); c = true; break; //move on, continue to attempt to write in bg } } } if (!c) { EXPORT.Close(); } } } ////Console.WriteLine(getLong(skipZeroes())); }