Re: Идентичность путей.
От: Аноним  
Дата: 26.07.11 14:29
Оценка: -1
Здравствуйте, Аноним, Вы писали:

А>Две строки содержат пути к файлам/папкам. Как определить что эти пути ссылаются на однин и тотже файл/паку? Возможно ли это сделать через win api?


Вот пример на Delphi:

function OpenDir(const FileName: string): THandle;
begin
Result := CreateFile(PChar(FileName), GENERIC_READ,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS, 0);
end;

procedure TForm1.Button1Click(Sender: TObject);
const
FileName1 = 'c:\Program Files (x86)\InstallShield Installation Information';
var
HDir1, HDir2: THandle;
FileName2: string;
R1, R2: TByHandleFileInformation;
begin
FileName2 := ExtractShortPathName(FileName1);
HDir1 := OpenDir(FileName1);
HDir2 := OpenDir(FileName2);
if (HDir1 <> INVALID_HANDLE_VALUE) and (HDir2 <> INVALID_HANDLE_VALUE) then
try
if GetFileInformationByHandle(HDir1, R1) and
GetFileInformationByHandle(HDir2, R2) and
(R1.dwVolumeSerialNumber = R2.dwVolumeSerialNumber) and
(R1.nFileIndexLow = R2.nFileIndexLow) and
(R2.nFileIndexHigh = R2.nFileIndexHigh) then
begin
ShowMessage('The same');
end;
finally
CloseHandle(HDir1);
CloseHandle(HDir2);
end;
end;

Определяет, что каталог один и тот же даже для subst, HardLink, разный сетевой редирект и т.п.
Ограничение (сейчас все менее актуальное): NTFS.

То же можно и для файла, думаю сами справитесь.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.