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; }
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); }