Aus Handle auf File den Dateinamen herausbekommen???
-
hallo,
ich habe ein handle auf eine datei, wie kann ich von dem handle auf den dateinamen kommen? weiß das jemand?
mfg
murph
-
Den kannst du dir doch eigentlich einfach vom Öffnen merken
-
hallo,
nein kann ich nicht, sonst würde ich ja nicht fragen. die sache ist so, ich prüfe ein verzeichnis per win-api funktionen:
-FindFirstChangeNotification
-FindNextChangeNotification
-FindCloseChangeNotification
-WaitForSingleObject
-etc.
auf änderungen. dies können verschiedene dinge sein, wie änderung des dateinamens, der dateiattribute, erstellen eines ordners, umbenennen einer datei/ordner (also hier unterordner), etc. die oberen funktionen helfen mir rauszufinden, wann eine solche änderungen eintritt, ich weiß aber nicht, welches object diese änderung ausgelöst hat (also der name der datei, des ordners). ich erhalte nur ein handle auf das geänderte object von der funktion:
-hHandle = FindFirstChangeNotification(path.c_str(), unter, notify);mein problem: wie kann ich aus diesem handle den dazugehörigen dateinamen ermitteln? dies müsste doch mit der api machbar sein. es gibt z. b. eine funktion namens setfilepointer die ein handle auf eine datei entgegennimmt, aber sie liefert mir eben auch keinen namen. aber irgendwas muss es ja geben...
mfg
murph
-
Evtl. könntest du statt dessen ReadDirectoryChangesW verwenden. Da bekommst du nämlich den Dateinamen
-
hallo,
@flenders: hallo ich bin am rumexperimentieren, aber das ding (die funktion) verlangt mir total unbekannt parameter, könntest du mir evtl zeigen wie man das ding richtig aufruft. und wie man die rückgabe (also den dateinamen) auswerten kann, also mein bisheriger code sieht so aus:
FChangeHandle := FindFirstChangeNotification(PChar(FDirWatch.DirWatch), FDirWatch.SubDirs, FDirWatch.ChangeProp); if FChangeHandle <> INVALID_HANDLE_VALUE then begin while True do begin if WaitForSingleObject(FChangeHandle, FDirWatch.TimeOut) = WAIT_OBJECT_0 then begin ReadDirectoryChangesW(FChangeHandle, PFNIStruct, SizeOf(PFNIStruct), FDirWatch.SubDirs, FDirWatch.ChangeProp, SizeOf(PFNIStruct), NULL, NULL); Synchronize(FDirWatch.DoChangeInDir); end; FindNextChangeNotification(FChangeHandle); if Terminated then //Dann raus, sobald Execute verlassen wird, wird Terminate aufgerufen. Break; end; end;
also ich denke, das man ReadDirectoryChangesW in kombination mit FindFirstChangeNotification verwendet, also das handle das man bei FindFirstChangeNotification zurückbekommt ReadDirectoryChangesW als handle übergibt, ist das richtig? der code ist in delphi-language lässt sich aber wegen des aufrufs von ReadDirectoryChangesW nicht übersetzten, vor allem bei den letzten drei mekkert er...
mfg
murph
-
hallo,
alles klar, der thread hat sich erledigt, ich bin auf den msdn und schließlich dem borland.net fündig geworden und konnte mir alles notwendige zusammenklauben...
danke!
mfg
murph
-
zeig mal her, was du herausfinden konntest