Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать SHARE адрес файла? 
:(
    Опции темы
Gnusss
  Дата 6.11.2005, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 19.1.2005

Репутация: нет
Всего: нет



Привет всем!

Надо узнать SHARE адрес(т.е "\\Windelphi\Текст\Текст.txt") файла(и есть ли он у него вообще), при этом имея только обычный адрес(F:\Текст\Текст.txt).

Заранее спасибо за ответ!
PM MAIL   Вверх
Демо
Дата 6.11.2005, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



ExpandUNCFileName


--------------------
    
PM MAIL ICQ Skype   Вверх
p0s0l
Дата 6.11.2005, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Цитата(Delphi)
On Windows, ExpandUNCFileName returns a fully qualified path name using Universal Naming Convention for network files. For files on local disks, ExpandUNCFileName is equivalent to ExpandFileName. In a UNC file name, the drive prefix is replaced with the name of the network resource to which the drive is mapped. For example, if the working directory is J:\ourdir and drive J is mapped to \\ourserver\ourshare, ExpandUNCFileName('ourfile') returns "\\ourserver\ourshare\ourdir\ourfile".


Gnusss, если ты про то, что надо получить путь к локальному файлу относительно расшаренного ресурса (папки), то тут просто придётся перебрать все расшаренные ресурсы и сравнить пути к файлу и путь ресурса - если второй входит в первый, значит это то что нужно...
Примерно так:
Код
function NetShareEnum(servername: PChar; level: DWORD; var bufptr: Pointer;
  prefmaxlen: DWORD; entriesread, totalentries,
  resume_handle: LPDWORD): DWORD; stdcall; external 'Netapi32.dll';

function NetApiBufferFree(buffer: Pointer): Cardinal; stdcall; external 'netapi32.dll';

type
  SHARE_INFO_2 = record
    shi2_netname: PWChar;
    shi2_type: DWORD;
    shi2_remark: PChar;
    shi2_permissions: DWORD;
    shi2_max_uses: DWORD;
    shi2_current_uses: DWORD;
    shi2_path: PWChar;
    shi2_passwd: PWChar;
  end;

  TShareInfoBuffer = packed array [0..0] of SHARE_INFO_2;

const
  MAX_PREFERRED_LENGTH = DWORD(-1);

function GetSharedFilePath (const FileName : string) : string;
var
  Entries, Total, Len : DWORD;
  buf : ^TShareInfoBuffer;
  i : integer;
  SearchPath, FoundPath, SharePath, CompName : string;

begin
  Result := '';
  SearchPath := AnsiUpperCase(ExtractFilePath (FileName));
  FoundPath := '';

  NetShareEnum (nil, 2, Pointer(buf), MAX_PREFERRED_LENGTH, @Entries, @Total, nil);
  if Entries > 0 then
    for i := 0 to Entries-1 do
      if Pos (AnsiUpperCase(buf[i].shi2_path), SearchPath) = 1 then
        if Length(buf[i].shi2_path) > Length(FoundPath) then
        begin
          Result := buf[i].shi2_netname;
          FoundPath := buf[i].shi2_path;
        end;
  NetApiBufferFree (buf);

  if Length(FoundPath) > 0 then
  begin
    FoundPath := IncludeTrailingBackslash(FoundPath);
    SharePath := ExtractRelativePath(FoundPath, SearchPath);
    Len := 1024;
    SetLength (CompName, Len);
    GetComputerName (PChar(CompName), Len);
    SetLength (CompName, Len);
    Result := '\\' + CompName + '\' + IncludeTrailingBackslash(Result) + SharePath + ExtractFileName(FileName);
  end;
end;
(тут еще сделана проверка на случай, если C:\Dir1\Dir2\File.txt - и Dir1 и Dir2 расшарены, тогда функция возвратит наиболее "близкий" путь, т.е. Dir2)...



--------------------
С уважением, г-н Посол.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0690 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.