Delphi:从另一台计算机打开一个文件

use*_*348 2 delphi security file

我的名字来自巴西的Carlos Im.我试图打开这样的文件:

image1.picture.loadfromfile('\\ntmemo01\c$\ozzy2.bmp');
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我接受了例外

类EFOpenError,消息"无法打开文件'\ntmem01\c $\ozzy2.bmp'访问被拒绝."

谢谢,卡洛斯

Dan*_*ski 15

你必须使用双反斜杠.

image1.picture.loadfromfile('\\ntmemo01\c$\ozzy2.bmp');
Run Code Online (Sandbox Code Playgroud)

如果仍然出现异常,则无法从您的应用程序访问该文件.

您应该做的第一件事是确保您可以使用Windows资源管理器访问该文件.

只需在开始菜单(WinKey + R)的"运行"对话框中键入它,看看会发生什么.如果它不起作用,请先在那里工作,然后再返回到您的程序.


Ken*_*ite 6

是否共享了ntmemo01上的C:驱动器?如果未共享,则无法访问它.如果它已共享但需要用户名和密码才能访问,则必须以不同方式访问它.您可以将驱动器号映射到它,在此过程中提供用户名和密码:

const
  RemoteName = '\\ntmemo01\C$';
  UserName = 'yourusername';
  Password = 'yourpassword';

function MapNetworkDrive: Boolean;
var
  NetRes: TNetResource;
  Res: DWord;
begin
  Result := True;
  FillChar(NetRes, SizeOf(TNetResource), 0);
  NetRes.dwType := RESOURCETYPE_DISK;
  NetRes.lpRemoteName := PChar(RemoteName);
  NetRes.lpLocalName := 'H:';   // Whatever drive letter you want
  Res := WNetAddConnection2(NetRes, PChar(Password), PChar(UserName), 0);
  Result := (Res = NO_ERROR);
end;
Run Code Online (Sandbox Code Playgroud)

之后取消映射:

function UnMapNetworkDrive: Boolean;
var
  Res: DWord;
begin
  Res := WNetCancelConnection2(PChar('H:'), 0, True); // same drive letter as above
  Result := (Res + NO_ERROR);
end;
Run Code Online (Sandbox Code Playgroud)


stu*_*lly 5

DR所述,文件名需要UNC路径的双反斜杠

拒绝访问消息表明您无权访问ntmemo01计算机上的C $共享.

C $ a是隐藏的管理共享您确定当前用户帐户具有正确的权限吗?正如肯·怀特所建议的那样,你首先要在地图上找到一个驱动器

默认情况下,在Windows Vista和Windows 7中禁用Administrive共享,除非您加入域.您可以按如下方式手动启用它们.

单击开始按钮,然后在搜索框中键入"regedit"并按Enter键.

浏览到HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System.

添加一个名为LocalAccountTokenFilterPolicy的新DWORD,并为其赋值1.

重启并完成!

资料来源:http://www.paulspoerry.com/2007/05/09/how-to-access-administrative-shares-on-vista-c/