Copie de fichiers [Résolu]

Signaler
Messages postés
5
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
3 juin 2005
-
Messages postés
5
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
3 juin 2005
-
La fonction ci-dessous ne fonctionne pas correctement, aidez moi svp!!
Merci davance.

function Copiefichier(srctmp, dsttmp : TRes) : Boolean; export;
var
Copybuffer : Pointer;
BytesCopied : Longint;
Source, Dest : Integer;
D_Dir : TRes;
FBufferSize : Integer;


begin
// affectation du résultat par défaut
result:=True;
// si le fichier source existe et la destination non nulle
if (fileexists(srctmp)) and (dsttmp<>'') then
begin
// Si le répertoire de destinantion n'existe pas on le crée
D_dir := ExtractFilePath(dsttmp);
if not DirectoryExists(D_Dir) then ForceDirectories(D_Dir);
// On alloue la mémoire au buffer de copie de fichier
GetMem(Copybuffer, FBufferSize);
try
// On ouvre le fichier
source := FileOpen(srctmp, fmShareDenyNone);
if Source<0 then begin result:=false;end;
try
// Création du fichier de destination
Dest := FileCreate(dsttmp);
if Dest<0 then begin result:=false;end;
try
// On copie tant que l'on a encore quelque chose à copier
repeat
BytesCopied := FileRead(Source, Copybuffer^, FBufferSize);
if BytesCopied>0 then
begin
// Ecriture du Buffer
if not (FileWrite(Dest, Copybuffer^, BytesCopied)>0) then
begin result:=false;end;
end;
until BytesCopied<FBufferSize;
FileSetDate(Dest,FileGetDate(Source));
finally
// Fermeture du fichier destination
FileClose(Dest);
end;
finally
// Fermeture du fichier source
FileClose(Source);
end;
finally
// Libération de la mémoire allouée au Buffer
freemem(Copybuffer, FBufferSize);
end;
end;
end;

4 réponses

Messages postés
5
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
3 juin 2005

function Copiefichier(srctmp, dsttmp : TRes) : Boolean; export;


var
Copybuffer : Pointer;
BytesCopied : Longint;
Source, Dest : Integer;
D_Dir : TRes;
FBufferSize : word;

begin
FBufferSize := 1024;
// affectation du résultat par défaut
result:=False;
// si le fichier source existe et la destination non nulle
if (fileexists(srctmp)) and (dsttmp<>'') then
begin
// Si le répertoire de destinantion n'existe pas on le crée
D_dir := ExtractFilePath(dsttmp);
if not DirectoryExists(D_Dir) then ForceDirectories(D_Dir);
// On alloue la mémoire au buffer de copie de fichier
GetMem(Copybuffer, FBufferSize);
try
// On ouvre le fichier
Source := FileOpen(srctmp, fmShareDenyNone);
if Source<0 then begin result:=false;end;
try
// Création du fichier de destination
Dest := FileCreate(dsttmp);
if Dest<0 then begin result:=false;end;
try
// On copie tant que l'on a encore quelque chose à copier
repeat
BytesCopied := FileRead(Source, Copybuffer^, FBufferSize);
if BytesCopied>0 then
begin
// Ecriture du Buffer
if not (FileWrite(Dest, Copybuffer^, BytesCopied)>0) then
begin result:=false;end;
end;
until BytesCopied<FBufferSize;
FileSetDate(Dest,FileGetDate(Source));
result:=true;
finally
// Fermeture du fichier destination
FileClose(Dest);
end;
finally
// Fermeture du fichier source
FileClose(Source);
end;
finally
// Libération de la mémoire allouée au Buffer
freemem(Copybuffer, FBufferSize);
end;
end;
end;
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
La prochaine fois, mets un titre plus explicite que "Pb Delphi".

// On alloue la mémoire au buffer de copie de fichier
GetMem(Copybuffer, FBufferSize);

Euh...quelle quantité de mémoire alloues-tu ?


<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
<
Messages postés
436
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
5 février 2015

Delphiprog a raison...

sinon tu as aussi la fonction copyfile

DrJerome
Messages postés
5
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
3 juin 2005

je suis en stage et je débute sur delphi donc je ne sais pas combien de mémoire allouer.