// TODO: Comprobar que no se excederá el limite de ficheros.. protected override void _Partir(string fichero,string sal1, string dir, long kb) { string bas = dir + Path.DirectorySeparatorChar + "SF{0:0000}.SF"; long tamano = kb*1024; CabeceraSF cab = new CabeceraSF(); cab.Nombre = fichero; tamano -= cab.Tamano; int contador = 1; long total_a_leer = new FileInfo(fichero).Length; if ((total_a_leer / tamano) > 255){ throw new Dalle.Formatos.FileFormatException(); } long transferidos = 0; OnProgress (0, 1); do{ byte[] b = UtilidadesFicheros.LeerSeek(fichero, transferidos, tamano); cab.Numero = contador; string nombreFichero = string.Format (bas, contador); transferidos += b.Length; UtilidadesFicheros.Append (nombreFichero, cab.ToByteArray()); UtilidadesFicheros.Append (nombreFichero, b); contador++; OnProgress (transferidos, total_a_leer); }while (transferidos < total_a_leer); }
protected override void _Unir(string fichero, string dirDest) { ArrayList lista = new ArrayList(); string destino = ""; string f = new FileInfo(fichero).DirectoryName; f += Path.DirectorySeparatorChar + "SF{0:0000}.SF"; for (int i = 1 ; File.Exists (string.Format (f,i)); i++) { CabeceraSF c = new CabeceraSF(string.Format (f,i)); if (c.Numero != i){ //TODO: Lanzar excepcion personalizada. throw new Exception (); } destino = dirDest + Path.DirectorySeparatorChar + c.Nombre; lista.Add (c); } UtilidadesFicheros.ComprobarSobreescribir(destino); int contador = 0; OnProgress (0, 1); foreach (CabeceraSF c in lista){ String nombre = string.Format (f, c.Numero); UtilidadesFicheros.CopiarIntervalo(nombre, destino, c.Tamano); OnProgress (++contador, lista.Count); } }