Salut,
Reset(FSource,1); {Chaque block := 128 octet}
Non, dans ce cas la taille des enregistrements n'est pas de 128 octets (valeur par défaut si paramètre omis) mais bel et bien d'un octet.
Par contre,
Rewrite(FDestination);
Ici, la taille des enregistrements est bien de 128 octets car le paramètre Taille_enr est omis.
Rappel :
procedure BlockWrite(var F:file; var Buf; Nombre:Word[;Resultat:Word]);
Le bloc transféré aura au plus une taille de
Nombre*
Taille_enr octets, où
Taille_enr représente la taille d'enregistrements précisée à l'ouverture du fichier.
procedure Rewrite(var F[:file; TailleEnr:Word] );
ou 128 octets si aucune taille n'avait été précisée.
Une erreur est retournée si le produit
Nombre*
Taille_enr est supérieur à 65535 (64 Ko).
Source : Guide de référence Turbo Pascal
Ci-dessous un code TP7 permettant le découpage de fichier en plusieurs fichiers de OutFileSize octets.
La lecture et l'écriture se fait par paquet de 65520 octets.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| Program FCut;
Const
BufferSize:Word=$FFF0;
OutFileSize:LongInt=1048576;
FilesCount:Word=0;
Var
InFile,OutFile:File;
Buffer:Pointer;
BytesCount:Word;
InBytesLeft,OutBytesLeft,BytesToWrite:LongInt;
Function WordToStr(W:Word):String;
Var
S:String[11];
Begin
Str(W,S);
WordToStr:=S;
End;
Begin
GetMem(Buffer,BufferSize);
Assign(InFile,'e:\src.zip');
Reset(InFile,1);
InBytesLeft:=FileSize(InFile);
Repeat
Inc(FilesCount);
Assign(OutFile,'e:\dest.'+WordToStr(FilesCount));
Rewrite(OutFile,1);
If InBytesLeft>OutFileSize Then
BytesToWrite:=OutFileSize
Else
BytesToWrite:=InBytesLeft;
OutBytesLeft:=BytesToWrite;
Repeat
If OutBytesLeft>BufferSize Then
BytesCount:=BufferSize
Else
BytesCount:=OutBytesLeft;
BlockRead(InFile,Buffer^,BytesCount);
BlockWrite(OutFile,Buffer^,BytesCount);
Dec(OutBytesLeft,BytesCount);
Until OutBytesLeft=0;
Close(OutFile);
Dec(InBytesLeft,BytesToWrite);
Until InBytesLeft=0;
Close(InFile);
FreeMem(Buffer,BufferSize)
End. |
Partager