public SplitterMergerStream(SplitterMergerInfo info) { this.info = info; currentFragment = 1; currentStream = File.OpenRead (info.GetFramentFilename (currentFragment)); currentStream.Seek (info.GetDataOffset (currentFragment), SeekOrigin.Begin); }
private static SplitterMergerInfo GetInfoSpl5(byte[] buffer, bool esExe, FileInfo fi) { SplitterMergerInfo ret = new SplitterMergerInfo (); if (esExe) { ret.exe = esExe; ret.exeLength = OFFSET_V_5_02; } ret.splDataSize = SPL_LENGTH_V_5; ret.version = SplitterMergerVersion.VERSION_5_02; ret.originalFilename = UtArrays.LeerTexto (buffer, 0, 260); ret.baseFilename = UtArrays.LeerTexto (buffer, 260, 260); ret.baseDirectory = fi.Directory.FullName; ret.length = UtArrays.LeerInt64 (buffer, 520); ret.timestamp = UtArrays.LeerDateTime (buffer, 528); ret.crc = UtArrays.LeerInt32 (buffer, 536); //short _vers = UtArrays.LeerInt16 (buffer, 540); bool comp = (UtArrays.LeerInt16 (buffer, 542) == 1); if (comp) { ret.compression = SplitterMergerCompression.GZIP_COMPRESSION; if (ret.originalFilename.ToLower ().EndsWith (".gz")) { ret.originalFilename = ret.originalFilename.Substring (0, ret.originalFilename.LastIndexOf ('.')); } } ret.fragments = CalculateFragmentsNumber (ret); return ret; }
private static SplitterMergerInfo GetInfoSpl1(string texto, bool esExe, FileInfo fi) { texto = texto.Replace ("\r", ""); string[] partes = texto.Split ('\n'); if (partes.Length != 2 && partes.Length != 3) { return null; } string original = partes[0]; int fragmentos = int.Parse (partes[1]); SplitterMergerInfo ret = new SplitterMergerInfo (); ret.version = partes.Length == 2 ? SplitterMergerVersion.VERSION_1_02 : SplitterMergerVersion.VERSION_1_1; ret.originalFilename = original; ret.baseFilename = fi.Name.Substring (0, fi.Name.LastIndexOf ('.')); ret.baseDirectory = fi.Directory.FullName; ret.fragments = fragmentos; ret.exe = esExe; if (esExe) { ret.version = SplitterMergerVersion.VERSION_2_0; ret.exeLength = OFFSET_V_2; ret.splDataSize = SPL_LENGTH_V_2; } return ret; }
private static SplitterMergerInfo GetInfoSpl3(byte[] buffer, bool esExe, FileInfo fi) { SplitterMergerInfo ret = new SplitterMergerInfo (); if (esExe) { ret.exe = esExe; ret.exeLength = OFFSET_V_3; } ret.splDataSize = SPL_LENGTH_V_3; ret.version = SplitterMergerVersion.VERSION_3_0; ret.originalFilename = UtArrays.LeerTexto (buffer, 0, 256); ret.baseFilename = ret.originalFilename; ret.baseDirectory = fi.Directory.FullName; ret.length = UtArrays.LeerInt64(buffer, 256); ret.timestamp = UtArrays.LeerDateTime(buffer, 264); ret.fragments = UtArrays.LeerInt32(buffer, 272); bool comp = UtArrays.LeerInt32(buffer, 276) == 1; if (comp) { ret.compression = SplitterMergerCompression.V3_COMPRESSION; if (ret.originalFilename.ToLower().EndsWith(".spc")) { ret.originalFilename = ret.originalFilename.Substring(0, ret.originalFilename.LastIndexOf('.')); } } return ret; }
private static int CalculateFragmentsNumber(SplitterMergerInfo m) { int i = 1; while (File.Exists (m.GetFramentFilename (i))) { i++; } return i - 1; }