PDA

Ver la Versión Completa : problema con copyfile


cesarjbf
18-09-2003, 11:07:27
Hola, ya lei varios hilos nuevos y viejos y llegue a la conclusion de que para copear un archivo de un directorio a otro se puede utilizar esto

procedure TForm1.Button1Click(Sender: TObject);
Var
f:TFileStream;
begin
f:=TFileStream.Create('c:\musica\001\depechemode.jpg',fmOpenRead or fmShareExclusive);
copyfile(pchar('c:\musica\001\depechemode.jpg'),pchar('c:\musica\006\001.jpg'),true);
f.free;
end;

el programa corre bien pero no copea nada,(delphi 5), GRACIAS

Investment
18-09-2003, 11:37:40
Hola cesarjbf.
En realidad, te basta con una sola linea:


CopyFile(PChar('C:\Temp\Copia.txt'),PChar('C:\Temp\log\Copia.txt'),TRUE);


Prueba poniendo solo esto y veras como funciona

cesarjbf
18-09-2003, 11:58:32
Muchas Gracias,


Funciono!!

cesarjbf
22-09-2003, 09:40:37
El metodo funciono pero como hago para que reescriba un archivo que ya existe,
por ejemplo una foto, mismo nombre pero diferente imagen.

delphi.com.ar
22-09-2003, 16:10:27
Como primero, te recomiendo que accedas a la ayuda antes que al foro, pues la solución la tienes al alcance de tu mano.
El tercer parámentro del CopyFile que tu estas pasando en true, significa: "Specifies how this operation is to proceed if a file of the same name as that specified by lpNewFileName already exists. If this parameter is TRUE and the new file already exists, the function fails. If this parameter is FALSE and the new file already exists, the function overwrites the existing file and succeeds."
Digamos que si pasas ese parámetro como True, sobreescribirá el archivo en el caso de que exista.

Saludos!

corso73
03-01-2012, 03:06:22
El método falla porque la cadena pasa con saltos de pagina. La recomendación es generar un código que limpie la cadena antes de pasarla si es que estan usando el CopyFile de forma dinámica, por ejemplo si obtienen el archivo de un Opendialog:

En lo particular utilice algo muy rustico para limpiar la cadena:

function Tfrm.DeleteLineBreaks(const S: string): string;
var
Source, SourceEnd: PChar;
begin
Source := Pointer(S) ;
SourceEnd := Source + Length(S) ;
while Source < SourceEnd do
begin
case Source^ of
#10: Source^ := #32;
#13: Source^ := #32;
end;
Inc(Source) ;
end;
Result := S;
end;

.... y la mando a llamar de la siguiente forma.

DeleteLineBreaks(ExtractFileName(edt_cer.Text));

y esta solucionado... no es nada de permisos ni nada por el estilo...

espero les sirva y si alguien le puede hacer una mejor por favor...


Saludos

Casimiro Notevi
03-01-2012, 11:49:03
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php)?, gracias por tu colaboración.

Y recuerda:
http://neftali.clubdelphi.com/images/UtilizarTAGs.png


Además has contestado a un mensaje de hace 9 años ;)