Ver la Versión Completa : Mover carpeta y todo su contenido
Utilizo esta funcion, pero no me funciona, me dice que no se puede leer del Archivo o Carpeta de origen, porque?
function MoverCarpeta(const carpetaOrigen,
carpetaDestion: string) : boolean;
var
FileOp: TSHFileOpStruct;
begin
FillChar(FileOp, SizeOf(FileOp), #0);
with FileOp do
begin
wFunc := FO_MOVE;
Wnd := GetDesktopWindow;
pTo := PChar(carpetaOrigen);
pFrom := PChar(carpetaDestion+#0#0);
fFlags := FOF_NOCONFIRMATION or
FOF_SILENT or FOF_ALLOWUNDO;
end;
Result := (ShFileOperation(FileOp) = 0);
end;
Y la llamada es
procedure TMain.Button1Click(Sender: TObject);
var dir,name,dest,root:string;
begin
root:=ExtractFilePath(Application.ExeName);
dir:=root+'SvrDirectory\';
dest:=root+'SvrHistory\';
name:=ADOQuery1.FieldByName('carpeta').AsString;
if ADOQuery1.RecordCount>0
then begin
//Muevo Dir
if MoverCarpeta(dir+name,dest+name)
then
//Borra Dir
// DeleteDir(dir+name);
end;
ADOQuery1.Delete;
ADOQuery1.Close;
ADOQuery1.Open;
end;
end;
seoane
27-05-2007, 00:10:58
Hombre, si no recuerdo mal mis clases de ingles, esto esta mal:
pTo := PChar(carpetaOrigen);
pFrom := PChar(carpetaDestion+#0#0);
cHackAll
30-05-2007, 02:00:24
jejej, no pude contenerme! no es el caso pero la observacion hace notar un pequeño BUG de "dedo"
jejej, no pude contenerme! no es el caso pero la observacion hace notar un pequeño BUG de "dedo"
:D jejejejejejejeje
egostar
30-05-2007, 19:49:17
jejej, no pude contenerme! no es el caso pero la observacion hace notar un pequeño BUG de "dedo"
:D:D:D, Pero un BUG de "dedo" bien manejado.......
function MoverCarpeta(const carpetaOrigen,
carpetaDestion: string) : boolean;
.......
.......
pTo := PChar(carpetaOrigen);
pFrom := PChar(carpetaDestion+#0#0);
.......
.......
Salud OS.
cHackAll
30-05-2007, 21:25:48
:D Cuando mis programas sufren de ese BUG me da ganas de llorar luego de pasar horas buscando la falla entre centenares de lineas!
Pero estuvo muy jocosa la observacion de las "clases de Ingles"... jejeje
Saludos!
seoane
30-05-2007, 21:49:13
:D Cuando mis programas sufren de ese BUG me da ganas de llorar luego de pasar horas buscando la falla entre centenares de lineas!
Pero estuvo muy jocosa la observacion de las "clases de Ingles"... jejeje
Saludos!
No era mi intención ser jocoso, solo quería remarcar, quizá con demasiada ironía, que el parámetro pFrom se corresponde con la carpeta de origen y pTo con la de destino, justamente al revés de como estaba colocado. La verdad es que no me había fijado en como estaba escrito "carpetaDestion".
JuanErasmo
31-05-2007, 16:21:05
Hola Domingo, y amigos,
yo utilizo esa funcion, para copiar archivo, y algunas veces tambien me sale ese error,
Algunas veces utilizo mejor TMemoryStream, primero load file, y luego saveto, asi es para copiar, pero lo mejor es hacerlo como dice Domingo,
Como se evita ese error de NO SE PUEDE LEER EL DISPOSITIVO?
cuando esta ocupado por otro proceso, no se deja copiar, es claro, que no cortar, perooo deberia dejarse copiar,,,,
Gracias
perooo deberia dejarse copiar,,,,
Gracias
No tiene por qué, si el proceso está escribiendo en ese archivo, no debe dejar leer tampoco.
cHackAll
31-05-2007, 21:51:08
No soy muy íntimo de ShFileOperation, pero creo que es una API bastante interesante!
El error inicial del hilo era el error de "dedo" verdad? o me equivoco. Ahora si les aparece algunos errores de dispositivo u otro por qué no intentan poner antes la siguiente linea... talvez les sea útil.
SetErrorMode(SEM_FAILCRITICALERRORS);
Saludos!
Keiso
03-06-2007, 05:08:04
Todo este código es pura API y me funciona muy bien con archivos y carpetas, "origen" y "destino" son strings globales y en la Uses añadir ShellApi.
procedure CopyProc;
var StructFile: _SHFILEOPSTRUCT;
begin
if destino <> "" then
// llenamos la estructura StructFile
begin
StructFile.Wnd:= 0;
StructFile.wFunc:= FO_MOVE;
StructFile.pFrom:= PChar(origen + #0);
// #0 es importante o no copiará algunos archivos
StructFile.pTo:= destino;
StructFile.fFlags:= FOF_SIMPLEPROGRESS;
StructFile.lpszProgressTitle:= PChar(origen + ' a ' + destino);
if SHFileOperation(StructFile) = 0 then
MessageBox(0,'Copiado','OK',0);
else
MessageBox(0,'No copiado','Error',MB_ICONHAND);
end
else
MessageBox(hMain,'Se debe seleccionar una carpeta de destino','Error',MB_ICONEXCLAMATION);
end;
Saludos!!!
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.