Partir archivo

Iniciado por Meta, 24 Mayo 2015, 00:32 AM

0 Miembros y 2 Visitantes están viendo este tema.

Meta

Hola:

Tengo archivos llamado .bin.

Si elijo un archivo que pesa 2048 KBytes. Quiero hacer un programa con Visual C# o en modo consola que sea capaz de partirlo a 1024 KBytes, exactamente partirlo por la mitad, no casi la mitad, sino la mitad exacto.

Cuando sea capaz de hacerlo, que lo vuelva a unir y que estor archivos no estén corruptos.

He buscado enlaces por aquí, se usa Split, pero esn para cadenas en las variables o dentro de los textos.
http://www.geekpedia.com/tutorial201_Splitting-and-joining-files-using-Csharp.html
http://www.c-sharpcorner.com/UploadFile/sayginteh/FileMergerandSplitterinCS12052005011745AM/FileMergerandSplitterinCS.aspx
http://www.codeproject.com/Articles/8873/Utilty-to-split-and-merge-files
http://socketprogramming.blogspot.com.ar/2008/11/split-and-assemble-large-file-around.html

¿Alguna ayudita para empezar aunque sea en modo consola?

Saludos.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

DarK_FirefoX

#1
Estuve pensando sobre lo que quieres hacer y me vino a la mente trabajar con unos FileStream y funciona, lo que pasa que a la hora de crear los buffers (byte[]) tienes que tener bien en cuenta el tamaño que le vas a dar para que tengan el tamaño exacto a la hora de unirlos. Para que no te queden corruptos, tienes que tener en cuenta bien la longitud de los ficheros que creas nuevos. Fijándote bien si la longitud del archivo es par o impar, para saber como controlar eso a la hora de picar el archivo. La clase FileStream tiene un método .Read() con el cual puedes leer (y guardar en un buffer (byte[]) desde una posición dada (offset) una cantidad de bytes determinados.

No se si esta sea la mejor manera de hacerlo, pero es una.

Puedes ir trabajando por ahi, me gustaría poder tirar el código ahora y ayudarte más pero ahora mismo estoy con poco tiempo, pero más tarde si tengo la oportunidad te ayudo un poco más.

Salu2s




Añado:

Como te había comentado, estuve viendo una forma de hacerlo, que quizás no sea la mejor, pero me funciono bien. (No siempre la primera vez es la mejor forma de hacerlo) Ahora solo te queda ver si esto te sirve o puedes/quieres hacerle modificaciones:

Código (csharp) [Seleccionar]
static void SplitFiles(string file)
       {
           FileStream loadedFile = new FileStream(file, FileMode.Open);

           //Aquí calculamos la primera mitad del archivo analizando si es par o impar la longitud completa.
           //En caso de que sea par le añadimos 1 y sino le añadimos 0 (lo dejamos como va)
           long firstHalfLength = (loadedFile.Length / 2) + ((loadedFile.Length % 2 != 0) ? 1 : 0);
           long secondHalfLength = loadedFile.Length / 2;

           //Creamos los bufferes con el tamaño calculado
           byte[] firstHalf = new byte[firstHalfLength];
           byte[] secondHalf = new byte[secondHalfLength];

           //Léemos los bytes del FileStream y los pasamos a los bufferes
           loadedFile.Read(firstHalf, 0, firstHalf.Length); //Lees la primera mitad
           loadedFile.Read(secondHalf, 0, secondHalf.Length); //Lees la segunda mitad

           loadedFile.Close();

           //Creamos los FileStream para los nuevos ficheros y escribimos los bytes en los mismos
           FileStream firstFile = new FileStream("fichero1.part1", FileMode.Create);
           firstFile.Write(firstHalf, 0, firstHalf.Length);

           firstFile.Close();

           FileStream secondFile = new FileStream("fichero1.part2", FileMode.Create);
           secondFile.Write(secondHalf, 0, secondHalf.Length);

           secondFile.Close();
       }

       static void JoinFiles(string file1 , string file2)
       {
           //Abrimos los FileStream de los archivos
           FileStream fileStream1 = new FileStream(file1, FileMode.Open);
           FileStream fileStream2 = new FileStream(file2, FileMode.Open);

           //Creamos el buffer para los bytes
           byte[] joinedFiles = new byte[fileStream1.Length + fileStream2.Length];

           //Leemos la primera mitad del archivo y la guardamos en el buffer nuevo
           fileStream1.Read(joinedFiles, 0, (int)fileStream1.Length);
           //Leemos la segunda mitad del archivo
           fileStream2.Read(joinedFiles, (int)(fileStream1.Length), (int)fileStream2.Length);

           fileStream1.Close();
           fileStream2.Close();

           //Escribimos el contenido del buffer en el nuevo fichero
           FileStream joinedFileStream = new FileStream("output.jpg", FileMode.Create);
           joinedFileStream.Write(joinedFiles, 0, joinedFiles.Length);
           joinedFileStream.Close();  
       }


Lo hice haciendo dos métodos, uno para picarlo y otro para unirlos. Puedes mejorarlo para que al unirlo puedas identificar que archivos tiene que unir automáticamente al pasarle el nombre del primer archivo.

Una manera de llamarlo sería:

Código (csharp) [Seleccionar]
SplitFiles("file.jpg");
JoinFiles("fichero1.part1", "fichero1.Part2");





Añado: Veo que publicaste otro tema sobre lo mismo con algún código. Bueno, cualquier otra duda ya sabes. Pregunta

Salu2s
Veo que publicaste

Eleкtro

#2
Aaquí tienes mi solución compelta para partir y unir archivos, eso si, lo desarrollé en VB.Net pero cómo siempre intentaré ayudar con la conversión en C# (conversión online y luego post-modificada por mi, pero no lo he llegado a testear).

Por supuesto lo he desarrollado teniendo en cuenta que sea capaz de partir archivos exactamente a la mitad (teniendo en cuenta que 1 byte es la unidad, por ende, un archivo de 3 bytes no se podrá partir en 2 partes, a menos que adaptes el código fuente para incrementarle 1 byte a una de las dos partes en el buffer de escritura),
si la idea te ha gustado y quieres utilizarla pero no te funciona la traducción a C#, siempre puedes compilar el código original escrito en VB.Net a una librería, y utilizarla desde tu proyecto C#.




Características

Partir archivo en trozos según el tamaño de trozo especificado.
Partir archivo en trozos según la cantidad de trozos especificada.
Unir archivo previamente partido.
Sobreescribir archivos, eliminar restos de archivos...
Eventos para reportar el progreso (porcentajes) de las operaciones de partir y unir.




Modo de empleo

VB.Net:
Código (vbnet) [Seleccionar]
''' <summary>
''' Handles the <see cref="FileSplitter"/> instance.
''' </summary>
Private WithEvents splitter As New FileSplitter() With {.BufferSize = .BufferSize}

' The file to split.
Private ReadOnly filePath As String = "C:\File.ext"

' Split by chunk size.
Me.splitter.Split(sourceFile:=filePath,
                 chunkSize:=CInt(New IO.FileInfo(filePath).Length / 2),
                 chunkName:="File.Part",
                 chunkExt:="fs",
                 overwrite:=True,
                 deleteAfterSplit:=False)

' Or split by chunk amount.
Me.splitter.Split(sourceFile:=filePath,
                 chunkCount:=2,
                 chunkName:="File.Part",
                 chunkExt:="fs",
                 overwrite:=True,
                 deleteAfterSplit:=True)

''' <summary>
''' Handles the <see cref="FileSplitter.SplitProgressChangedArgs"/> event of the <see cref="Splitter"/> instance.
''' </summary>
''' <param name="sender">The source of the event.</param>
''' <param name="e">The <see cref="FileSplitter.SplitProgressChangedArgs"/> instance containing the event data.</param>
Private Sub Splitter_SplitProgressChangedArgs(ByVal sender As Object, ByVal e As FileSplitter.SplitProgressChangedArgs) _
Handles splitter.SplitProgressChanged

   labelSplit1.Text = String.Format("Total Progress: {0}%", e.TotalProgress.ToString("n1"))
   labelSplit2.Text = String.Format("Chunk Progress: {0}%", e.ChunkProgress.ToString("n1"))
   labelSplit3.Text = String.Format("Current  Chunk: {0} of {1}", CStr(e.ChunksCreated + 1), CStr(e.ChunksToCreate))

End Sub

''' <summary>
''' Handles the <see cref="FileSplitter.MergeProgressChangedArgs"/> event of the <see cref="Splitter"/> instance.
''' </summary>
''' <param name="sender">The source of the event.</param>
''' <param name="e">The <see cref="FileSplitter.MergeProgressChangedArgs"/> instance containing the event data.</param>
Private Sub Splitter_MergeProgressChangedArgs(ByVal sender As Object, ByVal e As FileSplitter.MergeProgressChangedArgs) _
Handles splitter.MergeProgressChanged

   labelMerge1.Text = String.Format("Total Progress: {0}%", e.TotalProgress.ToString("n1"))
   labelMerge2.Text = String.Format("Chunk Progress: {0}%", e.ChunkProgress.ToString("n1"))
   labelMerge3.Text = String.Format("Current  Chunk: {0} of {1}", CStr(e.ChunksMerged + 1), CStr(e.ChunksToMerge))

End Sub


C#:
Código (csharp) [Seleccionar]
/// <summary>
/// Handles the <see cref="FileSplitter"/> instance.
/// </summary>
private FileSplitter splitter = new FileSplitter { BufferSize = .BufferSize };

// The file to split.
private readonly string filePath = "C:\\File.ext";

// Split by chunk size.
this.splitter.Split(sourceFile: filePath,
                   chunkSize: Convert.ToInt32(new IO.FileInfo(filePath).Length / 2),
                   chunkName: "File.Part",
                   chunkExt: "fs",
                   overwrite: true,
                   deleteAfterSplit: false);

// Or split by chunk amount.
this.splitter.Split(sourceFile: filePath,
                   chunkCount: 2, chunkName: "File.Part",
                   chunkExt: "fs",
                   overwrite: true,
                   deleteAfterSplit: true);

/// <summary>
/// Handles the <see cref="FileSplitter.SplitProgressChangedArgs"/> event of the <see cref="Splitter"/> instance.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="FileSplitter.SplitProgressChangedArgs"/> instance containing the event data.</param>
private void Splitter_SplitProgressChangedArgs(object sender, FileSplitter.SplitProgressChangedArgs e)
{
 labelSplit1.Text = string.Format("Total Progress: {0}%", e.TotalProgress.ToString("n1"));
 labelSplit2.Text = string.Format("Chunk Progress: {0}%", e.ChunkProgress.ToString("n1"));
 labelSplit3.Text = string.Format("Current  Chunk: {0} of {1}", Convert.ToString(e.ChunksCreated + 1), Convert.ToString(e.ChunksToCreate));
}

/// <summary>
/// Handles the <see cref="FileSplitter.MergeProgressChangedArgs"/> event of the <see cref="Splitter"/> instance.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="FileSplitter.MergeProgressChangedArgs"/> instance containing the event data.</param>
private void Splitter_MergeProgressChangedArgs(object sender, FileSplitter.MergeProgressChangedArgs e)
{
 labelMerge1.Text = string.Format("Total Progress: {0}%", e.TotalProgress.ToString("n1"));
 labelMerge2.Text = string.Format("Chunk Progress: {0}%", e.ChunkProgress.ToString("n1"));
 labelMerge3.Text = string.Format("Current  Chunk: {0} of {1}", Convert.ToString(e.ChunksMerged + 1), Convert.ToString(e.ChunksToMerge));
}

'=======================================================
'Service provided by Telerik (www.telerik.com)
'=======================================================





Código fuente
VB.Net: http://pastebin.com/kyqkdXZj
C#: http://pastebin.com/DKfCWuw1

Demo Form
VB.Net: http://pastebin.com/BjzEhPdd
C#: http://pastebin.com/Fq0QCJRi










DarK_FirefoX

Excelente @Eleкtro. Una clase bien limpia y comentada. Entendí varias cosas que no estaba muy claro. Ya con esto @Meta no tendrá problemas.

Salu2s

Eleкtro

Cita de: DarK_FirefoX en 28 Mayo 2015, 02:40 AM
Excelente @Eleкtro. Una clase bien limpia y comentada.

Gracias pero creo que se te olvidó decir que también es una solución demasiado basta (grande, exagerada) xD, soy consciente de ello, para partir un archivo de 2 mb en 2 trozos no es necesario tanto y tu solución es suficiente y efectiva, yo simplemente comparto esto por que me apetecía crear un código rehutilizable que sirva para ayudar a resolver este problema pero también para ayudar a resolver otras necesidades y con algunas funcionalidades adicionales.

Saludos!








DarK_FirefoX

Cita de: Eleкtro en 28 Mayo 2015, 02:54 AM
Gracias pero creo que se te olvidó decir que también es una solución demasiado basta (grande, exagerada) xD, soy consciente de ello, para partir un archivo de 2 mb en 2 trozos no es necesario tanto y tu solución es suficiente y efectiva, yo simplemente comparto esto por que me apetecía crear un código rehutilizable que sirva para ayudar a resolver este problema pero también para ayudar a resolver otras necesidades y con algunas funcionalidades adicionales.

Saludos!

Quizás sea "exagerada" para el objetivo que tenía @Meta, pero en lo personal, siempre encuentro fascinante poder aprender algo y ampliar mi perspectiva de las cosas en cuanto a programación se refiere. Presto especial atención a nuevos puntos de vistas y perspectivas diferentes a las mías.

PD: Sigo leyendo la clase para seguir entendiendo todo, así que te preguntaré si tengo alguna duda en algo!


Meta

#6
Hola:

Muchas gracias a todos.

Probaré los ejemplos y eso que el primero me funciona de maravilla,a menos partirlo.
Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.IO; // No olvidar.

namespace Partir_Archivo
{
   class Program
   {
       static void Main(string[] args)
       {

           const int CHUNKSIZE = 1024 * 1024;
           byte[] buffer;
           int i = 1;

           FileStream infile = new FileStream(@"Archivo.bin", FileMode.Open, FileAccess.Read);
           BinaryReader reader = new BinaryReader(infile);

           reader.BaseStream.Position = 0;
           buffer = reader.ReadBytes(CHUNKSIZE);
           while (buffer.Length != 0)
           {
               FileStream outfile = new FileStream(@"File_" + i + ".bin", FileMode.CreateNew, FileAccess.Write);
               BinaryWriter writer = new BinaryWriter(outfile);

               writer.Write(buffer);
               writer.Flush();
               writer.Close();
               outfile.Close();

               buffer = reader.ReadBytes(CHUNKSIZE);
               i++;
           }

           reader.Close();
           infile.Close();
       }
   }
}




Analizaré los ejemplos de arriba que me han mostrado.

El tema de si hay 3 bytes, se puede partir de esta manera.

Primer archivo ocupa dos bytes y el segundo 1 byte, sin problemas.

Una pregunta que les hago

Tengo un archivo de 48 M bit, quiero partir uno de 32 Mb (no Mega Byte) y el otro se queda en 16 M bit.

¿Cómo lo hago?

Esto ya es más complicado, ya que quiero hacer un Form bien hecho que pueda elegir el archivo donde lo tengo ubicado, esta parte si se hacerlo, encontrar el archivo, ejejjeje. Ahora me falta esta parte como curiosidad, partirlo como y quiera. Si parto el de 48 Mb a 32 el primer archivo, luego crea el resto que sobra que son 16 M Bit como dije antes.

Saludos.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Meta

Cita de: DarK_FirefoX en 24 Mayo 2015, 02:33 AM
Estuve pensando sobre lo que quieres hacer y me vino a la mente trabajar con unos FileStream y funciona, lo que pasa que a la hora de crear los buffers (byte[]) tienes que tener bien en cuenta el tamaño que le vas a dar para que tengan el tamaño exacto a la hora de unirlos. Para que no te queden corruptos, tienes que tener en cuenta bien la longitud de los ficheros que creas nuevos. Fijándote bien si la longitud del archivo es par o impar, para saber como controlar eso a la hora de picar el archivo. La clase FileStream tiene un método .Read() con el cual puedes leer (y guardar en un buffer (byte[]) desde una posición dada (offset) una cantidad de bytes determinados.

No se si esta sea la mejor manera de hacerlo, pero es una.

Puedes ir trabajando por ahi, me gustaría poder tirar el código ahora y ayudarte más pero ahora mismo estoy con poco tiempo, pero más tarde si tengo la oportunidad te ayudo un poco más.

Salu2s




Añado:

Como te había comentado, estuve viendo una forma de hacerlo, que quizás no sea la mejor, pero me funciono bien. (No siempre la primera vez es la mejor forma de hacerlo) Ahora solo te queda ver si esto te sirve o puedes/quieres hacerle modificaciones:

Código (csharp) [Seleccionar]
static void SplitFiles(string file)
       {
           FileStream loadedFile = new FileStream(file, FileMode.Open);

           //Aquí calculamos la primera mitad del archivo analizando si es par o impar la longitud completa.
           //En caso de que sea par le añadimos 1 y sino le añadimos 0 (lo dejamos como va)
           long firstHalfLength = (loadedFile.Length / 2) + ((loadedFile.Length % 2 != 0) ? 1 : 0);
           long secondHalfLength = loadedFile.Length / 2;

           //Creamos los bufferes con el tamaño calculado
           byte[] firstHalf = new byte[firstHalfLength];
           byte[] secondHalf = new byte[secondHalfLength];

           //Léemos los bytes del FileStream y los pasamos a los bufferes
           loadedFile.Read(firstHalf, 0, firstHalf.Length); //Lees la primera mitad
           loadedFile.Read(secondHalf, 0, secondHalf.Length); //Lees la segunda mitad

           loadedFile.Close();

           //Creamos los FileStream para los nuevos ficheros y escribimos los bytes en los mismos
           FileStream firstFile = new FileStream("fichero1.part1", FileMode.Create);
           firstFile.Write(firstHalf, 0, firstHalf.Length);

           firstFile.Close();

           FileStream secondFile = new FileStream("fichero1.part2", FileMode.Create);
           secondFile.Write(secondHalf, 0, secondHalf.Length);

           secondFile.Close();
       }

       static void JoinFiles(string file1 , string file2)
       {
           //Abrimos los FileStream de los archivos
           FileStream fileStream1 = new FileStream(file1, FileMode.Open);
           FileStream fileStream2 = new FileStream(file2, FileMode.Open);

           //Creamos el buffer para los bytes
           byte[] joinedFiles = new byte[fileStream1.Length + fileStream2.Length];

           //Leemos la primera mitad del archivo y la guardamos en el buffer nuevo
           fileStream1.Read(joinedFiles, 0, (int)fileStream1.Length);
           //Leemos la segunda mitad del archivo
           fileStream2.Read(joinedFiles, (int)(fileStream1.Length), (int)fileStream2.Length);

           fileStream1.Close();
           fileStream2.Close();

           //Escribimos el contenido del buffer en el nuevo fichero
           FileStream joinedFileStream = new FileStream("output.jpg", FileMode.Create);
           joinedFileStream.Write(joinedFiles, 0, joinedFiles.Length);
           joinedFileStream.Close();  
       }


Lo hice haciendo dos métodos, uno para picarlo y otro para unirlos. Puedes mejorarlo para que al unirlo puedas identificar que archivos tiene que unir automáticamente al pasarle el nombre del primer archivo.

Una manera de llamarlo sería:

Código (csharp) [Seleccionar]
SplitFiles("file.jpg");
JoinFiles("fichero1.part1", "fichero1.Part2");





Añado: Veo que publicaste otro tema sobre lo mismo con algún código. Bueno, cualquier otra duda ya sabes. Pregunta

Salu2s
Veo que publicaste

He intentado hacerlo per ono me sale.

¿Puedes poner el programa completo?

Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.IO; // No olvidar.

namespace Partir_Archivo_2
{
    class Program
    {
        static void Main(string[] args)
        {
           
        }
    }
}


Al menos una opción que diga Cortar en dos, y el otro Pegar.

Saludos.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Meta

Cita de: Eleкtro en 28 Mayo 2015, 02:25 AM
Aaquí tienes mi solución compelta para partir y unir archivos, eso si, lo desarrollé en VB.Net pero cómo siempre intentaré ayudar con la conversión en C# (conversión online y luego post-modificada por mi, pero no lo he llegado a testear).

Por supuesto lo he desarrollado teniendo en cuenta que sea capaz de partir archivos exactamente a la mitad (teniendo en cuenta que 1 byte es la unidad, por ende, un archivo de 3 bytes no se podrá partir en 2 partes, a menos que adaptes el código fuente para incrementarle 1 byte a una de las dos partes en el buffer de escritura),
si la idea te ha gustado y quieres utilizarla pero no te funciona la traducción a C#, siempre puedes compilar el código original escrito en VB.Net a una librería, y utilizarla desde tu proyecto C#.




Características

Partir archivo en trozos según el tamaño de trozo especificado.
Partir archivo en trozos según la cantidad de trozos especificada.
Unir archivo previamente partido.
Sobreescribir archivos, eliminar restos de archivos...
Eventos para reportar el progreso (porcentajes) de las operaciones de partir y unir.




Modo de empleo

VB.Net:
Código (vbnet) [Seleccionar]
''' <summary>
''' Handles the <see cref="FileSplitter"/> instance.
''' </summary>
Private WithEvents splitter As New FileSplitter() With {.BufferSize = .BufferSize}

' The file to split.
Private ReadOnly filePath As String = "C:\File.ext"

' Split by chunk size.
Me.splitter.Split(sourceFile:=filePath,
                 chunkSize:=CInt(New IO.FileInfo(filePath).Length / 2),
                 chunkName:="File.Part",
                 chunkExt:="fs",
                 overwrite:=True,
                 deleteAfterSplit:=False)

' Or split by chunk amount.
Me.splitter.Split(sourceFile:=filePath,
                 chunkCount:=2,
                 chunkName:="File.Part",
                 chunkExt:="fs",
                 overwrite:=True,
                 deleteAfterSplit:=True)

''' <summary>
''' Handles the <see cref="FileSplitter.SplitProgressChangedArgs"/> event of the <see cref="Splitter"/> instance.
''' </summary>
''' <param name="sender">The source of the event.</param>
''' <param name="e">The <see cref="FileSplitter.SplitProgressChangedArgs"/> instance containing the event data.</param>
Private Sub Splitter_SplitProgressChangedArgs(ByVal sender As Object, ByVal e As FileSplitter.SplitProgressChangedArgs) _
Handles splitter.SplitProgressChanged

   labelSplit1.Text = String.Format("Total Progress: {0}%", e.TotalProgress.ToString("n1"))
   labelSplit2.Text = String.Format("Chunk Progress: {0}%", e.ChunkProgress.ToString("n1"))
   labelSplit3.Text = String.Format("Current  Chunk: {0} of {1}", CStr(e.ChunksCreated + 1), CStr(e.ChunksToCreate))

End Sub

''' <summary>
''' Handles the <see cref="FileSplitter.MergeProgressChangedArgs"/> event of the <see cref="Splitter"/> instance.
''' </summary>
''' <param name="sender">The source of the event.</param>
''' <param name="e">The <see cref="FileSplitter.MergeProgressChangedArgs"/> instance containing the event data.</param>
Private Sub Splitter_MergeProgressChangedArgs(ByVal sender As Object, ByVal e As FileSplitter.MergeProgressChangedArgs) _
Handles splitter.MergeProgressChanged

   labelMerge1.Text = String.Format("Total Progress: {0}%", e.TotalProgress.ToString("n1"))
   labelMerge2.Text = String.Format("Chunk Progress: {0}%", e.ChunkProgress.ToString("n1"))
   labelMerge3.Text = String.Format("Current  Chunk: {0} of {1}", CStr(e.ChunksMerged + 1), CStr(e.ChunksToMerge))

End Sub


C#:
Código (csharp) [Seleccionar]
/// <summary>
/// Handles the <see cref="FileSplitter"/> instance.
/// </summary>
private FileSplitter splitter = new FileSplitter { BufferSize = .BufferSize };

// The file to split.
private readonly string filePath = "C:\\File.ext";

// Split by chunk size.
this.splitter.Split(sourceFile: filePath,
                   chunkSize: Convert.ToInt32(new IO.FileInfo(filePath).Length / 2),
                   chunkName: "File.Part",
                   chunkExt: "fs",
                   overwrite: true,
                   deleteAfterSplit: false);

// Or split by chunk amount.
this.splitter.Split(sourceFile: filePath,
                   chunkCount: 2, chunkName: "File.Part",
                   chunkExt: "fs",
                   overwrite: true,
                   deleteAfterSplit: true);

/// <summary>
/// Handles the <see cref="FileSplitter.SplitProgressChangedArgs"/> event of the <see cref="Splitter"/> instance.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="FileSplitter.SplitProgressChangedArgs"/> instance containing the event data.</param>
private void Splitter_SplitProgressChangedArgs(object sender, FileSplitter.SplitProgressChangedArgs e)
{
 labelSplit1.Text = string.Format("Total Progress: {0}%", e.TotalProgress.ToString("n1"));
 labelSplit2.Text = string.Format("Chunk Progress: {0}%", e.ChunkProgress.ToString("n1"));
 labelSplit3.Text = string.Format("Current  Chunk: {0} of {1}", Convert.ToString(e.ChunksCreated + 1), Convert.ToString(e.ChunksToCreate));
}

/// <summary>
/// Handles the <see cref="FileSplitter.MergeProgressChangedArgs"/> event of the <see cref="Splitter"/> instance.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="FileSplitter.MergeProgressChangedArgs"/> instance containing the event data.</param>
private void Splitter_MergeProgressChangedArgs(object sender, FileSplitter.MergeProgressChangedArgs e)
{
 labelMerge1.Text = string.Format("Total Progress: {0}%", e.TotalProgress.ToString("n1"));
 labelMerge2.Text = string.Format("Chunk Progress: {0}%", e.ChunkProgress.ToString("n1"));
 labelMerge3.Text = string.Format("Current  Chunk: {0} of {1}", Convert.ToString(e.ChunksMerged + 1), Convert.ToString(e.ChunksToMerge));
}

'=======================================================
'Service provided by Telerik (www.telerik.com)
'=======================================================





Código fuente
VB.Net: http://pastebin.com/kyqkdXZj
C#: http://pastebin.com/DKfCWuw1

Demo Form
VB.Net: http://pastebin.com/BjzEhPdd
C#: http://pastebin.com/Fq0QCJRi




Buen trabajo.

¿Puedes pasarme el proyecto completo?
El correo puedes verlo por aquí.

Me parece un programa muy completo, echo y derecho. ;)

Hay que probarlo.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Eleкtro

Cita de: Meta en  4 Junio 2015, 23:35 PM¿Puedes pasarme el proyecto completo?

Solo tienes que crear un nuevo proyecto y reemplazar la Class principal (Form1), por esta class, que ya genera los controles del form:

Cita de: Eleкtro en 28 Mayo 2015, 02:25 AMDemo Form
VB.Net: http://pastebin.com/BjzEhPdd

Saludos.