Получить локальное имя сетевого ресурса в Delphi

delphi

1716 просмотра

2 ответа

Как получить локальное имя сетевого ресурса в Delphi?

У меня есть Filepath для локального псевдонима общего сетевого ресурса Z:\someFolder\someFileи я могу расширить путь UNC \\server\sharename\someFolder\someFile. Тем не менее, мне нужен локальный путь на удаленном местеF:\sharedFolder\someFolder\someFile

заранее спасибо

Автор: Bjarke Moholt Источник Размещён: 13.11.2019 11:33

Ответы (2)


4 плюса

Вот небольшой пример:

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.
Автор: Ondrej Kelle Размещён: 04.07.2014 02:00

2 плюса

Боюсь, это невозможно.

Всякий раз, когда вы разделяете какую-либо папку по сети, вы можете получить только ее имя, структуру файла и структуру ее подпапок. Но вы не можете получить никакой информации о его родительской папке и определенно не всю структуру каталогов жесткого диска, на котором эта папка физически расположена.

На самом деле общая папка может даже не присутствовать физически на компьютере, с которого она является общей. Это может быть подпапка с другого общего сетевого диска, который используется другим компьютером.

Автор: SilverWarior Размещён: 19.06.2014 01:37
Вопросы из категории :
32x32