Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   ¿Mejor manera de mover un directorio con ficheros de un sitio a otro? (https://www.clubdelphi.com/foros/showthread.php?t=90744)

manujimenez 25-08-2016 13:53:15

¿Mejor manera de mover un directorio con ficheros de un sitio a otro?
 
Buenas:
Podrías decirme cual es la mejor manera de mover un directorio con ficheros de un sitio a otro.
Tanto del disco como de la red.
Gracias

ecfisa 25-08-2016 18:23:21

Hola.

Si estas usando Lazarus bajo el S.O. Windows podes hacer:
Código Delphi [-]
...
uses Windows, ShellApi;

function MoveDir(const fromDir, toDir: string): Boolean;
var
  fos: TSHFileOpStruct;
begin
  ZeroMemory(@fos, SizeOf(fos));
  fos.wFunc  := FO_MOVE;
  fos.fFlags := FOF_NOCONFIRMMKDIR + FOF_RENAMEONCOLLISION;
  fos.pFrom  := PChar(fromDir + #0);
  fos.pTo    := PChar(toDir);
  Result     := ShFileOperation(fos) = 0;
end;

Un ejemplo de uso:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  if not MoveDir('C:\Folder_A', 'C:\Folder_B\SubFolder_B\Folder_A') then
    ShowMessage('Error moviendo directorio');
end;

Saludos :)

manujimenez 26-08-2016 09:44:36

Ok, gracias
 
yo estoy usando solo free pascal de lazarus la aplicación es de consola.
De todas maneras es que soy muy nuevo no se donde pegar en la unit que genera lazarus
la linea de funcion:

function MoveDir(const fromDir, toDir: string): Boolean;

y el resto:

ZeroMemory(@fos, SizeOf(fos));
fos.wFunc := FO_MOVE;
fos.fFlags := FOF_NOCONFIRMMKDIR + FOF_RENAMEONCOLLISION;
fos.pFrom := PChar(fromDir + #0);
fos.pTo := PChar(toDir);
Result := ShFileOperation(fos) = 0;

Casimiro Noteví 26-08-2016 10:12:54

Bienvenido a clubdelphi, como siempre aconsejamos a los nuevos, no olvides leer nuestra guía de estilo, gracias por tu colaboración :)


Y recuerda poner los tags al código fuente, ejemplo:



Gracias :)

manujimenez 26-08-2016 10:37:15

Si Disculpar.... de nuevo.
Necesitaria algo muy sencillo como por ejemplo esto que pusiste pero que funcione en free pascal (terminal)

Código Delphi [-]
begin
  if not MoveDir('C:\Folder_A', 'C:\Folder_B\SubFolder_B\Folder_A') then
    ShowMessage('Error moviendo directorio');
end;

La finalidad es recoger varios directorios y unirlos en una sola carpeta.
Bueno gracias de antemano

ecfisa 26-08-2016 12:33:32

Hola.

¿ Algo así ?
Código Delphi [-]
// Cabecera (opcional)
program Project1;

// inclusión de unidades a usar
uses Windows, ShellApi;

// declaración de funciones/procedimientos
function MoveDir(const fromDir, toDir: string): Boolean;
var
  fos: TSHFileOpStruct;
begin
  ZeroMemory(@fos, SizeOf(fos));
  fos.wFunc  := FO_MOVE;
  fos.fFlags := FOF_NOCONFIRMMKDIR + FOF_RENAMEONCOLLISION;
  fos.pFrom  := PChar(fromDir + #0);
  fos.pTo    := PChar(toDir);
  Result     := ShFileOperation(fos) = 0;
end;

// cuerpo principal del programa
begin
  ...
  if not MoveDir('C:\Folder_A', 'C:\Folder_B\SubFolder_B\Folder_A') then
    Writeln('Error moviendo directorio');
  ...
end.

Saludos :)

manujimenez 29-08-2016 09:06:14

No me va
 
Te agradezco un montón pero no me funciona ni consola con free pascal, ni con lazarus.
Cuando compilo con lazarus me tira esta error.

Código Delphi [-]
Unit1.pas (5,1) Fatal syntax error: "INTERFACE" expected but "USES" found.


Cuando lo compilo con free pascal:

Código Delphi [-]
Mueve_Dir.pas(15,17) Error: Illegal type conversion: "ShortString" to "PChar"
Mueve_Dir.pas(16,17) Error: Illegal type conversion: "ShortString" to "PChar"
Mueve_Dir.pas(17,3) Error: Identifier not found "Result"
Mueve_Dir.pas(22,3) Error: Illegal expression
Mueve_Dir.pas(23,3) Fatal: Syntax error, ";" expected but "IF" found

Gracias


La franja horaria es GMT +2. Ahora son las 14:20:01.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi