Пример #1
0
        public static JoinInfo GetFromFile(string fichero)
        {
            JoinInfo info = new JoinInfo ();
            info.Directory = new FileInfo (fichero).Directory;
            string original = new FileInfo (fichero).Name;
            string extensionParte = original.Substring (original.LastIndexOf (".")+1);
            info.BaseName = original.Substring (0, original.LastIndexOf ('.') + 1);
            info.OriginalFile = original.Substring (0, original.LastIndexOf ('.'));

            // Soporte ultrasplit
            if (extensionParte.StartsWith ("u")) {
                info.BaseName = original.Substring (0, original.LastIndexOf ('.') + 2);
            }
            info.Digits = original.Length - info.BaseName.Length;

            if (File.Exists (info.Directory.FullName + Path.DirectorySeparatorChar + info.BaseName + UtilidadesCadenas.Format (0, info.Digits)))
            {
                info.InitialFragment = 0;
            }
            else if (File.Exists (info.Directory.FullName + Path.DirectorySeparatorChar + info.BaseName  + UtilidadesCadenas.Format (1, info.Digits)))
            {
                info.InitialFragment = 1;
            }
            else {
                return null;
            }
            int contador = 1;

            while (File.Exists (info.GetFragmentFullPath (contador)))
            {
                FileInfo fi = new FileInfo (info.GetFragmentFullPath (contador));
                info.Length += fi.Length;
                contador++;
            }
            info.FragmentsNumber = contador - 1;

            // Comprobar cutkiller
            if (info.InitialFragment == 1 && info.Digits == 3)
            {
                byte[] buffer = UtilidadesFicheros.LeerSeek (info.GetFragmentFullPath(1), 0, 8);
                string extension = UtArrays.LeerTexto (buffer, 0, 3);
                string fragmentos = UtArrays.LeerTexto (buffer, 3, 5);
                if (extension.Length > 0 && fragmentos.Length == 5)
                {
                    if (
                        Char.IsWhiteSpace (fragmentos[0]) &&
                        Char.IsWhiteSpace (fragmentos[1]) &&
                        Char.IsDigit (fragmentos[2]) &&
                        Char.IsDigit (fragmentos[3]) &&
                        Char.IsDigit (fragmentos[4]) &&
                        Int32.Parse (fragmentos.Trim ()) == info.FragmentsNumber

                    )
                    {
                        info.IsCutKiller = true;
                        info.OriginalFile = info.OriginalFile + "." + extension;
                        info.Length -= 8;
                    }
                }
            }
            info.CalculateLength();
            return info;
        }
Пример #2
0
        protected override void _Unir(string fichero, string dirDest)
        {
            FileInfo fi = new FileInfo (fichero);
            string[] partes = GetPartesNombre (fi.Name);
            JoinInfo info = new JoinInfo ();
            info.Digits = 3;
            info.InitialFragment = 1;
            info.BaseName = partes[0];
            info.OriginalFile = info.BaseName;
            info.FragmentsNumber = Int32.Parse (partes[2]);
            info.Format = info.BaseName + "{0:D3}-" + info.FragmentsNumber;
            info.Directory = fi.Directory;
            info.CalculateLength ();

            new ParteGenerico ().Unir (fichero, dirDest, info);
        }