在Delphi中获取网络共享的本地名称 [英] Get local name of network share in Delphi

查看:137
本文介绍了在Delphi中获取网络共享的本地名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我如何获取Delphi中网络共享的本地名称?



我有一个Filepath到网络共享的本地别名 Z:\someFolder\someFile ,并且可以扩展UNC路径 \\server\sharename\someFolder\someFile 。但是,我需要远程位置的本地路径 F:\sharedFolder\someFolder\someFile



谢谢你提前

解决方案

这里有一个小例子:

 程序测试; 

{$ APPTYPE CONSOLE}

{$ R * .res}

使用
Windows,
SysUtils;

const
netapi ='netapi32.dll';
NERR_Success = 0;
STYPE_DISKTREE = 0;
STYPE_PRINTQ = 1;
STYPE_DEVICE = 2;
STYPE_IPC = 3;
STYPE_TEMPORARY = $ 4亿;
STYPE_SPECIAL = $ 80000000;

函数NetApiBufferFree(缓冲区:指针):DWORD;标准外部netapi
函数NetShareGetInfo(servername,netname:PWideChar; level:DWORD; out bufptr:Pointer):DWORD;标准
外部netapi;

type
PShareInfo2 = ^ TShareInfo2;
TShareInfo2 = record
shi2_netname:PWideChar;
shi2_type:DWORD;
shi2_remark:PWideChar;
shi2_permissions:DWORD;
shi2_max_uses:DWORD;
shi2_current_uses:DWORD;
shi2_path:PWideChar;
shi2_passwd:PWideChar;
结束

函数ShareNameToServerLocalPath(const ServerName,ShareName:string):string;
var
ErrorCode:DWORD;
缓冲区:指针;
begin
结果:='';

ErrorCode:= NetShareGetInfo(PWideChar(ServerName),PWideChar(ShareName),2,Buffer);
尝试
如果ErrorCode = NERR_Success然后
结果:= PShareInfo2(缓冲区)^。shi2_path;
finally
NetApiBufferFree(Buffer);
结束
结束

程序主;
begin
Writeln(ShareNameToServerLocalPath('\\\MyServer','MyShare'));
结束

开始
尝试
主;
除了
在E:异常do
开始
ExitCode:= 1;
Writeln(Format('[%s]%s',[E.ClassName,E.Message]));
结束
结束
结束。


How do I get the local name of a network share in Delphi?

I have a Filepath to the local alias of the network share Z:\someFolder\someFile and am able to expand the UNC path \\server\sharename\someFolder\someFile. However, I need the local path on the remote location F:\sharedFolder\someFolder\someFile

Thank you in advance

解决方案

Here's a small example:

program test;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  Windows,
  SysUtils;

const
  netapi = 'netapi32.dll';
  NERR_Success = 0;
  STYPE_DISKTREE  = 0;
  STYPE_PRINTQ    = 1;
  STYPE_DEVICE    = 2;
  STYPE_IPC       = 3;
  STYPE_TEMPORARY = $40000000;
  STYPE_SPECIAL   = $80000000;

function NetApiBufferFree(Buffer: Pointer): DWORD; stdcall; external netapi;
function NetShareGetInfo(servername, netname: PWideChar; level: DWORD; out bufptr: Pointer): DWORD; stdcall;
  external netapi;

type
  PShareInfo2 = ^TShareInfo2;
  TShareInfo2 = record
    shi2_netname: PWideChar;
    shi2_type: DWORD;
    shi2_remark: PWideChar;
    shi2_permissions: DWORD;
    shi2_max_uses: DWORD;
    shi2_current_uses: DWORD;
    shi2_path: PWideChar;
    shi2_passwd: PWideChar;
  end;

function ShareNameToServerLocalPath(const ServerName, ShareName: string): string;
var
  ErrorCode: DWORD;
  Buffer: Pointer;
begin
  Result := '';

  ErrorCode := NetShareGetInfo(PWideChar(ServerName), PWideChar(ShareName), 2, Buffer);
  try
    if ErrorCode = NERR_Success then
      Result := PShareInfo2(Buffer)^.shi2_path;
  finally
    NetApiBufferFree(Buffer);
  end;
end;

procedure Main;
begin
  Writeln(ShareNameToServerLocalPath('\\MyServer', 'MyShare'));
end;

begin
  try
    Main;
  except
    on E: Exception do
    begin
      ExitCode := 1;
      Writeln(Format('[%s] %s', [E.ClassName, E.Message]));
    end;
  end;
end.

这篇关于在Delphi中获取网络共享的本地名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆