1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| function Predicat(const Path: string;const SearchRec: TSearchRec): Boolean;
var S : String;
f : boolean;
function MyFileGetSymLinkTarget( const APathToLink : string; var ATarget : string ) : boolean;
var
LinkHandle: THandle;
TargetName: array [0..512] of Char;
begin
ATarget := '';
LinkHandle := CreateFile( PChar(APathToLink), 0, FILE_SHARE_READ, nil,
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
Win32Check(LinkHandle <> INVALID_HANDLE_VALUE);
try
Result := GetFinalPathNameByHandle(LinkHandle, TargetName, OFS_MAXPATHNAME, FILE_NAME_NORMALIZED) > 0;
if Result then
begin
ATarget := TargetName;
if Pos( '\\?\UNC\', ATarget ) = 1 then
begin
Delete( ATarget, 1, 8 );
Insert( '\\', ATarget, 1 );
end
else
if Pos( '\\?\', ATarget ) = 1 then
Delete( ATarget, 1, 4 );
end;
finally
CloseHandle(LinkHandle);
end;
end;
begin
if (SearchRec.Attr AND faSymLink)<>0 then
begin
result:=false;
Try
f:=MyFileGetSymLinkTarget(TPath.Combine(Path,SearchRec.Name),S);
Form12.Memo1.Lines.Add(S);
except
on E:Exception do Showmessage(E.Message);
End;
end
else result:=true;
// SearchRec.FindHandle
end;
procedure TForm12.FormCreate(Sender: TObject);
var
Folders :TStringDynArray;
i :integer;
begin
Folders := TDirectory.GetDirectories('C:\Users\Public\documents',Predicat);
for i := 0 to High(Folders) do Memo1.Lines.Add(Folders[i]);
end; |
Partager