Für ein geplantes selbst gestricktes Backup-Programm möchte ich gern bei Hardlinks feststellen, welche Dateinamen alle auf den gleichen Speicherbereich ("Datei") zeigen. Nach viel Recherche bin ich darauf gekommen, dass hier FindFirstFileNameW und FindNextFileNameW genau das Richtige sind.
Die Windows-
API definiert FindFirstFileNameW(_In_ LPCWSTR lpFileName,_In_ DWORD dwFlags,_Inout_ LPDWORD StringLength,_Inout_ PWCHAR LinkName) und FindNextFileNameW(_In_
HANDLE hFindStream,_Inout_ LPDWORD StringLength,_Inout_ PWCHAR LinkName).
Trotz des Anspruchs, dass Delphi die gesamte Windows-
API kapselt, habe ich nichts dergleichen gefunden.
Erstaunlicherweise ergibt die Google-Suchen nach den Funktionen im Zusammenhang mit Delphi NIX, GAR NIX !
Ich müsste also die Funktionen dynamisch aus kernel32 laden.
Hierzu habe ich für GetTickCount64 ein Beispiel gefunden:
Delphi-Quellcode:
function GetTickCount64: Int64;
implementation
uses Windows, SysUtils;
type
// Don't forget stdcall for API functions.
TGetTickCount64 =
function: Int64;
stdcall;
var
_GetTickCount64: TGetTickCount64;
// Load the Vista function if available, and call it.
// Raise EOSError if the function isn't available.
function GetTickCount64: Int64;
var
kernel32: HModule;
begin
if not Assigned(_GetTickCount64)
then begin
// Kernel32 is always loaded already, so use GetModuleHandle
// instead of LoadLibrary
kernel32 := GetModuleHandle('
kernel32');
if kernel32 = 0
then
RaiseLastOSError;
@_GetTickCount := GetProcAddress(kernel32, '
GetTickCount64');
if not Assigned(_GetTickCount64)
then
RaiseLastOSError;
end;
Result := _GetTickCount64;
end;
Weiß einer von den Delphi-Cracks hier vielleicht, wie die beiden Funktionen aufzurufen wären?