1. Principio de corte/combinación de archivos
El corte de archivos es cortar un archivo en varios archivos pequeños. El método es leer un objeto de archivo en forma de una "transmisión de archivo" y luego guardarlo en archivos de acuerdo con cierto tamaño de bloque. La combinación de archivos significa combinar varios archivos en un archivo. Por ejemplo, este principio se utiliza para herramientas de embalaje (sabio). Si está familiarizado con el concepto de "flujo", será fácil de implementar. 2. Date cuenta
Cree un nuevo proyecto en Delphi, luego agregue dos botones, una edición, uno Opendialog y One Savedialog a la forma, y luego cambie el subtítulo de Button1 a "Cortar" y el título de Button2 a "Combinación" (Nota: Otro Controlos Atributos omitidos). Haga doble clic en Button1 y Button2 y escriba el siguiente código:
// Corta el archivo
Procedimiento tForm1.Button1Click (remitente: tobject);
varilla
Yo, WantedFragSize, RealToWrite: Integer;
// declarar dos objetos de transmisión de archivos
// Institeam es el objeto de transmisión de archivo de origen de entrada, y Outstream es el objeto de transmisión de archivo de corte de salida de salida
InSEAM, Outstream: tfilErtream;
S: cadena;
Comenzar
Si opendialog1.ExCute entonces
Comenzar
SaveDialog1.title: = 'Ingrese el nombre del archivo de corte que desea guardar';
Si saveDialog1.ExCute entonces
Comenzar
WantedFraGSize: = strToint (edit1.text);
i: = 0;
// Crear un objeto de transmisión de archivo de entrada de manera de solo lectura
Instail: = tfilErtream.create (
Opendialog1.filename, fMopenread);
Intentar
// Si la posición actual del puntero de la transmisión del InSteam no está al final, lea los datos y guárdelo en un archivo de acuerdo con el tamaño de bloque definido //
while (instramp.position <instramp.size) do
Comenzar
s: = intToStr (i);
mientras que la longitud (s) <3 do s: = '0'+s;
S: = '.'+S;
// Generar la extensión del archivo de corte, use tres dígitos como extensión para facilitar la combinación de archivos
// Si el tamaño del bloque restante en el Instaz es menor que el tamaño de bloque definido, guarde el número de bloque restante // datos en un archivo
If InSteam.size - Intileam.Position <WantedFragSize entonces
RealToWRite: = InSteam.Size - Instance.Position
demás
RealToWRite: = WantedFragSize;
// Crear un objeto de transmisión de archivo de salida
Outstream: = tfilErtream.create (saveDialog1.filename+s, fmCreate);
intentar
Outstream.CopyFrom (InSteam, RealToWRite);
Inc (i);
Finalmente
// libera el objeto de transmisión del archivo de salida
Outstream.free;
fin;
fin;
Finalmente
Insteam.Free;
fin;
fin;
fin;
final;
procedimiento tForm1.Button2Click (remitente: tobject);
varilla
I: entero;
InSEAM, Outstream: tfilErtream;
SourcePath, Fragname, S: String;
Comenzar
Opendialog1.title: = 'Seleccione el archivo de corte';
Si opendialog1.ExCute entonces
Comenzar
// Obtener la ruta al archivo de corte abierto actualmente
SourcePath: = ExtractFilePath (Opendialog1.FileName);
// Obtenga el nombre del archivo del archivo de corte abierto actualmente
Fragname: = ExtractFileName (Opendialog1.FileName);
SaveDialog1.title: = 'Ingrese el nombre del archivo que desea combinar';
Si saveDialog1.ExCute entonces
Comenzar
i: = 0;
s: = intToStr (i);
mientras que la longitud (s) <3 do s: = '0'+s;
S: = '.'+S;
Fragname: = ChangeFileExt (Fragname, S);
// Si hay un archivo con la extensión .000 en el directorio, cree una transmisión de archivo de salida // objeto
Si fileexists (SourcePath+Fragname) entonces
Comenzar
Outstream: = tfilEnstream.create (saveDialog1.filename, fmCreate);
Intentar
// Combinar archivos en incrementos con la extensión de archivo
Mientras que los fileexists (SourcePath+Fragname) lo hacen
Comenzar
InSteam: = tfilErtream.create (SourcePath+Fragname, fMopenRead);
Intentar
// Escribe los datos de la secuencia del archivo de entrada a la transmisión del archivo de salida
Outstream.CopyFrom (InSteam, 0);
Inc (i);
s: = intToStr (i);
mientras que la longitud (s) <3 do s: = '0'+s;
S: = '.'+S;
Fragname: = ChangeFileExt (Fragname, S);
Finalmente
Insteam.Free;
fin;
fin;
Finalmente
Outstream.free;
fin;
fin;
fin;
fin;
fin;
Entre las muchas herramientas diarias que utilizamos, hay muchos objetos de "transmisión" que usaremos, y sus funciones también son muy importantes. Agarrarlo es muy útil y más importante.