Copie de fichiers

Résolu
natie_49 Messages postés 5 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 3 juin 2005 - 17 mai 2005 à 16:59
natie_49 Messages postés 5 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 3 juin 2005 - 19 mai 2005 à 09:12
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

natie_49 Messages postés 5 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 3 juin 2005
19 mai 2005 à 09:12
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;
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 33
18 mai 2005 à 00:03
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.
<
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
18 mai 2005 à 09:49
Delphiprog a raison...

sinon tu as aussi la fonction copyfile

DrJerome
natie_49 Messages postés 5 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 3 juin 2005
18 mai 2005 à 10:54
je suis en stage et je débute sur delphi donc je ne sais pas combien de mémoire allouer.
Rejoignez-nous