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 64 65 66 67 68 69 70 71 72 73 74 75
| procedure TForm1.MapCopy(compteur: integer; laprogressbar: TProgressBar;
lelabel: TLabel);
var
FFilehandle: THANDLE;
FFileMap: THANDLE;
FmappingPtr: pchar;
hFile2: THANDLE ;
SizeFile1,BytesWritten: DWORD ;
begin
lelabel.Caption := ObtenirNomfichier(PElementListe(Liste[compteur])
.sourcefichier);
FFilehandle := CreateFile(pchar(TElementListe(Liste.Items[compteur]^)
.sourcefichier),
GENERIC_WRITE OR GENERIC_READ,
FILE_SHARE_READ OR FILE_SHARE_WRITE,
nil,
OPEN_EXISTING,
FILE_FLAG_NO_BUFFERING,
0);
if (FFilehandle <> INVALID_HANDLE_VALUE) then
begin
FFileMap := CreateFileMapping(FFileHandle, // handle to file to map
nil, // optional security attributes
PAGE_READWRITE, // protection for mapping object
0, // high-order 32 bits of object size
0, // low-order 32 bits of object size
0); //
if (FFileMap <> NULL) then
begin
FMappingPtr := MapViewOfFile(FFileMap,
FILE_MAP_WRITE,
0,
0,
0);
if Assigned(FMappingPtr) then
begin
// Manipulation de FMappingPtr
hFile2 := CreateFile(pchar(TElementListe(Liste.Items[compteur]^).destinationfichier +'\'+ TElementListe(Liste.Items[compteur]^).dossier +
ExtractFileName(TElementListe(Liste.Items[compteur]^).sourcefichier)),GENERIC_WRITE,0,nil,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
if (hFile2 <> INVALID_HANDLE_VALUE) then
begin
SizeFile1 := GetFileSize(FFilehandle,NIL); // recupere taille du fichier 1
WriteFile(hFile2,Fmappingptr[0],SizeFile1,&BytesWritten,NIL); // Transfert la mémoire mappé dans file 2
// libere les ressources
end
else MessageBox(0,'Impossible de lire le fichier mappé','Error',0);
UnmapViewOfFile(Fmappingptr);
CloseHandle(FFileMap);
CloseHandle(FFilehandle);
CloseHandle(hFile2);
end
else
begin
CloseHandle (FFileMap);
CloseHandle (FFileHandle);
MessageBox(0,'Impossible de lire le fichier mappé','Error',0);
end;
end
else
begin
CloseHandle (FFilemap);
MessageBox(0,'Impossible de mappe le fichier en mémoire','Error',0);
end;
end
else
MessageBox(0,'Impossible d''ouvrir le fichier','Error',0);
end; |
Partager