He hecho este pequeño programita ejemplo, para ver si puedes buscar el error.
Tiene un panel alineado alTop con un boton y un Memo para guardar un Log de todos los pasos.
En el evento del botón se llama al procedimiento que copia.
Si alguna función devuelve un error, te lo muestra en el memo.
Yo he probado con
- IP que no existe
- Nombre de usuario y contraseña incorrectos
- Carpeta que no existe dentro de la ip
Todos estos me dan algún tipo de error.
Ya nos contarás...
Código Delphi
[-]
unit UFMMainCopia;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TFMMainCopia = class(TForm)
PNLMain: TPanel;
BCopiar: TButton;
MLog: TMemo;
procedure BCopiarClick(Sender: TObject);
private
procedure prcCopiARed(vOrigen, vDestino, vUser, vPassword :string);
public
end;
var
FMMainCopia: TFMMainCopia;
implementation
{$R *.dfm}
procedure TFMMainCopia.prcCopiARed(vOrigen, vDestino, vUser, vPassword :string);
var
NetResource: TNetResource;
vRuta : PChar;
ErrCode : integer;
ErrCode2 : LongBool;
begin
MLog.Clear;
vRuta := PChar('\\192.168.152.127\Compartida');
MLog.Lines.Add('vRuta := PChar(''\\192.168.152.127\Compartida'')');
NetResource.dwType := RESOURCETYPE_DISK;
MLog.Lines.Add('NetResource.dwType := RESOURCETYPE_DISK');
NetResource.lpLocalName := 'X:';
MLog.Lines.Add('NetResource.lpLocalName := ''X:''');
NetResource.lpRemoteName := vRuta;
MLog.Lines.Add('NetResource.lpRemoteName := vRuta');
NetResource.lpProvider := '';
MLog.Lines.Add('NetResource.lpProvider := ''''');
if (vUser = '') then
begin
ErrCode := WNetAddConnection2(NetResource, nil, nil, CONNECT_UPDATE_PROFILE);
MLog.Lines.Add('WNetAddConnection2(NetResource, nil, nil, CONNECT_UPDATE_PROFILE)');
end
else
begin
ErrCode := WNetAddConnection2(NetResource, PChar(vPassword), PChar(vUser), CONNECT_UPDATE_PROFILE);
MLog.Lines.Add('WNetAddConnection2(NetResource, PChar(' + vPassword + '), PChar(' + vUser + '), CONNECT_UPDATE_PROFILE)');
end;
MLog.Lines.Add('ErrCode: '+IntToStr(ErrCode));
if (ErrCode = ERROR_ACCESS_DENIED ) then MLog.Lines.Add('ERROR_ACCESS_DENIED') else
if (ErrCode = ERROR_ALREADY_ASSIGNED ) then MLog.Lines.Add('ERROR_ALREADY_ASSIGNED') else
if (ErrCode = ERROR_BAD_DEV_TYPE ) then MLog.Lines.Add('ERROR_BAD_DEV_TYPE') else
if (ErrCode = ERROR_BAD_DEVICE ) then MLog.Lines.Add('ERROR_BAD_DEVICE') else
if (ErrCode = ERROR_BAD_NET_NAME ) then MLog.Lines.Add('ERROR_BAD_NET_NAME') else
if (ErrCode = ERROR_BAD_PROFILE ) then MLog.Lines.Add('ERROR_BAD_PROFILE') else
if (ErrCode = ERROR_BAD_PROVIDER ) then MLog.Lines.Add('ERROR_BAD_PROVIDER') else
if (ErrCode = ERROR_BUSY ) then MLog.Lines.Add('ERROR_BUSY') else
if (ErrCode = ERROR_CANCELLED ) then MLog.Lines.Add('ERROR_CANCELLED') else
if (ErrCode = ERROR_CANNOT_OPEN_PROFILE ) then MLog.Lines.Add('ERROR_CANNOT_OPEN_PROFILE') else
if (ErrCode = ERROR_DEVICE_ALREADY_REMEMBERED ) then MLog.Lines.Add('ERROR_DEVICE_ALREADY_REMEMBERED') else
if (ErrCode = ERROR_EXTENDED_ERROR ) then MLog.Lines.Add('ERROR_EXTENDED_ERROR') else
if (ErrCode = ERROR_INVALID_PASSWORD ) then MLog.Lines.Add('ERROR_INVALID_PASSWORD') else
if (ErrCode = ERROR_NO_NET_OR_BAD_PATH ) then MLog.Lines.Add('ERROR_NO_NET_OR_BAD_PATH') else
if (ErrCode = ERROR_NO_NETWORK ) then MLog.Lines.Add('ERROR_NO_NETWORK') else
MLog.Lines.Add('DESCONOCIDO');
ErrCode2 := CopyFile(PChar(vOrigen), PChar('X:\destino.txt'), True);
MLog.Lines.Add('CopyFile(PChar(' + vOrigen + '), PChar(' + vDestino + '), True)');
if (ErrCode2) then
MLog.Lines.Add('ErrCode: True')
else
MLog.Lines.Add('ErrCode: False');
ErrCode := WNetCancelConnection2('X:', CONNECT_UPDATE_PROFILE, True);
MLog.Lines.Add('WNetCancelConnection2(''X:'', CONNECT_UPDATE_PROFILE, True)''');
MLog.Lines.Add('ErrCode: '+IntToStr(ErrCode));
end;
procedure TFMMainCopia.BCopiarClick(Sender: TObject);
begin
prcCopiARed('C:\Origen.txt', 'X:\Destino.txt', 'Usuario', 'password');
end;
end.