1. Principe de coupe / combinaison de fichiers
La coupe de fichiers doit couper un fichier en plusieurs petits fichiers. La méthode consiste à lire un objet de fichier sous la forme d'un "flux de fichiers", puis à l'enregistrer dans des fichiers en fonction d'une certaine taille de bloc. La combinaison de fichiers signifie combiner plusieurs fichiers en un seul fichier. Par exemple, ce principe est utilisé pour les outils d'emballage (sage). Si vous connaissez le concept de «flux», il sera facile à mettre en œuvre. 2. Réalisez
Créez un nouveau projet à Delphi, puis ajoutez deux boutons, un montage, un opendialog et un SAVEDIALOG au formulaire, puis modifiez la légende de Button1 en "Coupez", et la légende de Button2 en "combinaison" (Remarque: Autre Contrôles Attributs omis). Double-cliquez sur Button1 et Button2 et écrivez le code suivant:
// coupe le fichier
Procédure tform1.button1Click (expéditeur: tobject);
var
I, je voulaisfragsize, realtowrite: entier;
// Déclarer deux objets de flux de fichiers
// Insileam est l'objet de flux de fichiers source d'entrée, et Outstream est l'objet de flux de fichiers de coupe de sortie
Insile, outrem: tfilestream;
S: String;
Commencer
Si openDialog1.excute alors
Commencer
SAVEDIALOG1.TITLE: = 'Entrez le nom du fichier de coupe que vous souhaitez enregistrer';
Si SaveDedialog1.Exécute alors
Commencer
WantedFragSize: = strToint (edit1.Text);
i: = 0;
// Créer un objet de flux de fichiers d'entrée de manière en lecture seule
Instream: = tFileStream.Create (
OpenDialog1.FileName, fmOpenRead);
Essayer
// Si la position actuelle du pointeur du flux Instream n'est pas à la fin, lisez les données et stockez-la dans un fichier en fonction de la taille du bloc défini //
tandis que (instream.position <instream.size)
Commencer
S: = IntToStr (I);
tandis que la longueur (s) <3 do s: = '0' + s;
S: = '.' + S;
// Générez l'extension du fichier de coupe, utilisez trois chiffres comme extension pour faciliter la combinaison des fichiers
// Si la taille restante du bloc dans Instream est plus petite que la taille du bloc définie, enregistrez le numéro de bloc // restant des données dans un fichier
Si insiteam.size - instream.position <WantedFragsize alors
Realtowrite: = insiteam.size - instream.position
autre
RealTowrite: = WantedFragSize;
// Créer un objet de flux de fichiers de sortie
Outstream: = tFileStream.Create (SaveDedialog1.FileName + S, fmcreate);
essayer
Outstream.copyFrom (InsideRam, realTowrite);
Inc (i);
Enfin
// Libérez l'objet de flux de fichiers de sortie
Strestream.recref;
fin;
fin;
Enfin
Instream.free;
fin;
fin;
fin;
fin; fichier combiné
Procédure tform1.button2click (expéditeur: tobject);
var
I: entier;
Insile, outrem: tfilestream;
SourcePath, fragname, s: string;
Commencer
OpenDialog1.Title: = 'Veuillez sélectionner Cut Fichier';
Si openDialog1.excute alors
Commencer
// Obtenez le chemin d'accès au fichier de coupe actuellement ouvert
SourcePath: = ExtractFilePath (OpenDialog1.FileName);
// Obtenez le nom du fichier du fichier de coupe actuellement ouvert
Fragname: = extractFileName (OpenDialog1.FileName);
SAVEDIALOG1.TITLE: = 'Veuillez saisir le nom de fichier que vous souhaitez combiner';
Si SaveDedialog1.Exécute alors
Commencer
i: = 0;
S: = IntToStr (I);
tandis que la longueur (s) <3 do s: = '0' + s;
S: = '.' + S;
FragName: = ChangeFileExt (fragname, s);
// s'il y a un fichier avec l'extension .000 dans le répertoire, créez un flux de fichiers de sortie // objet
Si des fichiers (sourcePath + fragname)
Commencer
Outstream: = tFileStream.Create (SaveDedialog1.FileName, fmcreate);
Essayer
// combinant des fichiers par incréments avec extension de fichier
Tandis que les fichiers (sourcePath + fragname) font
Commencer
Instream: = tFileStream.create (sourcePath + fragname, fmOpenRead);
Essayer
// Écrivez les données du flux de fichiers d'entrée sur le flux de fichiers de sortie
Outstream.copyFrom (Instream, 0);
Inc (i);
S: = IntToStr (I);
tandis que la longueur (s) <3 do s: = '0' + s;
S: = '.' + S;
FragName: = ChangeFileExt (fragname, s);
Enfin
Instream.free;
fin;
fin;
Enfin
Strestream.recref;
fin;
fin;
fin;
fin;
fin;
Parmi les nombreux outils quotidiens que nous utilisons, il y a de nombreux objets "Stream" que nous utiliserons, et leurs fonctions sont également très importantes. Le saisir est très utile et plus important.