public SplitterMergerStream(SplitterMergerInfo info)
 {
     this.info = info;
     currentFragment = 1;
     currentStream = File.OpenRead (info.GetFramentFilename (currentFragment));
     currentStream.Seek (info.GetDataOffset (currentFragment), SeekOrigin.Begin);
 }
示例#2
0
        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;
        }
示例#3
0
        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;
        }
示例#4
0
        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;
        }
示例#5
0
 private static int CalculateFragmentsNumber(SplitterMergerInfo m)
 {
     int i = 1;
     while (File.Exists (m.GetFramentFilename (i)))
     {
         i++;
     }
     return i - 1;
 }