Delphi - COMO COPIAR ARCHIVOS DE UN LISTBOX

 
Vista:

COMO COPIAR ARCHIVOS DE UN LISTBOX

Publicado por Raulito (8 intervenciones) el 25/04/2003 18:29:10
antes hice esta misma pregunta se trata de que kiero copiar los archivos que hacen referencia en un lisbox a un directorio que lo seleccionare con un directorylistbox,esto es lo que me dijeron que pusiera:
var
I:Integer;
begin
for I:=0 to ListBox1.Items.Count-1 do
copyfile(pchar(ListBox1.Items[I]),pchar(DirectoryListBox1.directory +
extractfilename(ListBox1.Items[I])),false);
end;

resulta que no hace nada ni da fallo ni copia
muchas gracias si lo respondes y si no tb x haberlo leido jejej
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:COMO COPIAR ARCHIVOS DE UN LISTBOX

Publicado por Ernesto De Spirito (706 intervenciones) el 26/04/2003 17:14:36
La función CopFile no genera una excepción si la copia falla, sino que devuelve False, y luego con GetLastError puedes obtener el código de error y con SysErrorMessage el mensaje correspondiente al mismo, o si quieres puedes dierectamente lanzar una excepción. Ej.:

if not copyfile(....................) then
RaiseLastWin32Error;

Respecto de por que no funciona la copia, lo primero que veo es que se usa DirectoryListBox1.directory + nombre del archivo, lo que está mal pues la propiedad Directory del DirectoryListBox no devuelve la barra invertida final "\" a menos que el directorio seleccionado sea el directorio raíz. Lo correcto sería usar

IncludeTrailingBackslash(DirectoryListBox1.directory) + nombre del archivo

Lo segundo que noto es que no se especifica el directorio de los archivos de origen por lo que se supondrá el directorio actual, y si no están allí, entonces habría que indicar el camino correspondiente de manera similar a como se hizo con el directorio destino.

Lo tercero que noto es el uso de DirectoryListBox para seleccionar el directorio destino, que no lo recomiendo por ser engañoso. Si el usuario no hace doble-clic en un directorio, el directorio no será seleccionado (la propiedad Directory no cambiará de valor) aunque parezca que sí. O sea, el directorio que parece seleccionado (marcado con color azul en el caso de usar los colores estándar de Windows) no es necesariamente en realidad el directorio seleccionado. Mi sugerencia es usar un cuadro de texto con un botón para seleccionar el directorio, como es habitual encontrar en las aplicaciones profesionales. Para hacer esto último puedes llamar a la función SelectDirectory que viene en la librería del Delphi, o puedes usar mi función BrowseForFolder, tratada en los números #33 y #34 del Boletín Pascal:

* MOSTRANDO EL DIALOGO "BUSCAR CARPETA" DE WINDOWS
http://www.latiumsoftware.com/es/pascal/0033.php#6

* MOSTRANDO EL DIALOGO "BUSCAR CARPETA" DE WINDOWS (II)
http://www.latiumsoftware.com/es/pascal/0034.php#7

Espero que te sirva.

Ernesto De Spirito
http://www.latiumsoftware.com/es/index.php
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar