-1

我需要将位于我的 newtwork 目录上的文件复制到我的本地计算机。我做了一些研究,发现了一个名为 Windows API 的函数,但是当我尝试调用复制文件时,我收到了拒绝访问的消息。这里是项目。

procedure TForm1.btnLoginLogOnClick(Sender: TObject);
var
   phToken: THandle;
begin
   WriteLog('');
   WriteLog('Current user: ' + GetCurrentUser());
   // check for correct login
   phToken := 0;
   try
   phToken := CheckLogin(Edit1.Text, Edit2.Text, Edit3.Text); //user,password,domain
   WriteLog('Handle: ' + IntToStr(phToken));
   if (phToken > 0) Then begin
      WriteLog('User login ok');

      // login ok, switch ACL to new login context (demo purpose only)
      ImpersonateLoggedOnUser(phToken);

      WriteLog('Impersonated user: ' + GetCurrentUser());
     if( CopyFile(PWideChar(Edit4.Text),('C:\cp2101.zip'),false)=false) then//CopyFile('c:\a.jpg','c:\warn.jpg',true))=false then
            ShowMessage(SysErrorMessage(GetLastError));

      // revert back to original login context
      RevertToSelf;
      WriteLog('Reverted to original user: ' + GetCurrentUser());

      TQuery(phToken, Edit3.Text);
      TQueryGroups(phToken, Edit3.Text);

   end else begin
      WriteLog('User login failed');
   end;

   finally
      CloseHandle(phToken);
   end;
end;

这是项目:项目链接

4

2 回答 2

1

第一个建议是您没有访问网络目录或相关文件的权限。这些可以是访问权限或复制权限(或两者)。检查您是否拥有这两个权限。

于 2013-07-11T10:27:48.017 回答
0

所以,如果 Windows explorer 可以复制这个文件,你可以使用 SHFileOperation:

procedure SHCopyFile(const Source, Dest: string);
var
  OP: SHFILEOPSTRUCT;
begin
  With Op do
  begin
    WND := 0;
    wFunc := FO_COPY;
    pFrom := PChar(Source + #0#0);
    fFlags := 0;
    pTo := PChar(Dest + #0);
    fAnyOperationsAborted := False;
    hNameMappings := Nil;
    lpszProgressTitle := Nil;
  end;
  SHFileOperation(Op);

end;
于 2013-08-01T09:03:28.270 回答