Delphi:从另一台电脑打开一个文件

问题描述:

我的名字是来自巴西的Carlos Im。 我试图打开这样的文件:Delphi:从另一台电脑打开一个文件

image1.picture.loadfromfile('\\ntmemo01\c$\ozzy2.bmp'); 

但它不工作。 Im收到异常

类EFOpenError带消息“无法打开文件”\ ntmemo01 \ c $ \ ozzy2.bmp'访问被拒绝。“

感谢, 卡洛斯

+0

C $一个隐藏的管理共享你确定当前用户帐户具有正确的权限? http://support.microsoft.com/kb/314984 – stukelly 2009-03-03 15:48:49

你必须使用双反斜线。

image1.picture.loadfromfile('\\ntmemo01\c$\ozzy2.bmp'); 

如果仍然出现异常,那么文件无法从您的应用程序访问。

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

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

+0

image1.picture.loadfromfile('\\ ntmemo01 \ c $ \ ozzy2.bmp')也不起作用。它返回相同的异常 – user67348 2009-03-03 14:29:36

+0

添加更多我的答案。 – 2009-03-03 15:20:01

当你在windows资源管理器中复制完全相同的字符串时,文件是否打开? 否则,它可能是一个权利问题,正如错误所示。

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; 

要取消映射算账:

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

正如DR提到的,文件名需要一个UNC path双反斜线

访问被拒绝消息表明您没有权限访问ntmemo01计算机上的C $共享。

隐藏C $ a administrative share您确定当前用户帐户具有正确的权限吗?您首先需要映射驱动器,如Ken White

所暗示的那样,管理共享在Windows Vista和Windows 7中默认处于禁用状态,除非您加入域。您可以按照以下方式手动启用它们。

单击开始按钮并在搜索框中输入'regedit'并按回车。

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

添加一个新的DWORD 称为LocalAccountTokenFilterPolicy,并给它的的值。

重新启动并完成!

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