Entwickler-Ecke
Windows API - Filename aus Filehandle
Boldar - So 28.12.08 23:31
Titel: Filename aus Filehandle
Hmm ich habe da ein komplexes Problem,
und ich hoffe ich nerve nicht, weil ich schon soviel gefragt habe in letzter Zeit...
Wie kriegt man den Dateinamen und -pfad aus einem filehandle?
ich habe schon
das hier [
http://msdn.microsoft.com/en-us/library/aa366789.aspx] gefunden, kann man das auf Delphi portieren?
Geht das?
mfg Boldar
jaenicke - So 28.12.08 23:37
Schau mal hier, das geht mit GetFileInformationByHandleEx (FileNameInfo): ;-)
http://msdn.microsoft.com/en-us/library/aa364953(VS.85).aspx
// EDIT:
Ich sehe schon: das geht so einfach erst ab Vista.
Dann ist vorher wohl das was du im Edit gepostet hast das passende. Übersetzen geht sicher.
jaenicke - So 28.12.08 23:44
Das ist eine Aufzählung, in Delphi also sowas:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| type TExample = (exaName1, exaName2, exaName3); ... var test: TExample; begin test := exaName2; case test of exaName1: ... exaName2: ... |
Boldar - So 28.12.08 23:48
Wenn da diese Zeile steht:
Quelltext
1:
| BOOL GetFileNameFromHandle(HANDLE hFile) |
was ist dann BOOL ?
Einfach boolean oder longbool??
jaenicke - So 28.12.08 23:55
Nimm doch einfach Bool ;-). Das gibts durchaus und verweist intern auf den richtigen Datentyp (LongBool), um Übersetzungen zu erleichtern ;-).
Boldar - Mo 29.12.08 12:03
ist Tchar ein Pointertyp? Ich habe lptstring mit pointer übersetzt, aber dann müsst Tchar auch ein pointer sein...
Boldar - Mo 29.12.08 12:07
Aso und gleich noc eine Frage dazu: ich habe die Ausdrücke, die in C integer waren, nach boolean gecastet. Ist das richtig?
jaenicke - Mo 29.12.08 12:07
Übersetzen würde ich das mit
array[0..MAX_PATH] of Char. ;-)
Ich hatte bisher nur in die API Referenz kurz geschaut, aber jetzt hab ich grad mal bei Google gesucht :D, die Frage gabs schon: :D
http://www.delphipraxis.net/topic123965.html
Boldar - Mo 29.12.08 12:08
ja, das habe ich zuerst versucht, gab aber einen fürchterlichen rash und das ganze ist sehr unübersichtlich...
Boldar - Mo 29.12.08 12:09
Also, und wie übersetz man das:
Quelltext
1:
| TCHAR szDrive[3] = TEXT(" :"); |
Was heisst denn das TEXT?? :?: :gruebel: :gruebel:
Ahh Ok das scheint zu klappen...
jaenicke - Mo 29.12.08 12:15
Ich glaube du kannst einen String auf PChar gecastet an die Funktion übergeben mit dem Inhalt C: z.B., im C-Quelltext wird der erste Buchstabe durch den jeweiligen Laufwerksbuchstaben ersetzt vor der Übergabe, deshalb das Leerzeichen.
Boldar - Mo 29.12.08 12:21
also, ich habs jetzt erstmal übernommen von
da [
http://www.spotlight-wissen.de/archiv/message/1376764.html]
Nur weiss ich nicht wie ich getmappedfilename vernünftig hinkriege, laut msdn inner psapi.dll,
aber bei dieser Deklaration
Delphi-Quelltext
1:
| function GetMappedFileName( const hProcess: Thandle;const lpv: pointer;var lpFilename: array of char;const nsize: Dword):dword; winapi;external 'psapi.dll'; |
kommt der Fehler von wegen Prozedureinspungpunkt nicht gefunden...
jaenicke - Mo 29.12.08 12:47
Nimm doch einfach die fertigen Übersetzungen aus der JEDI Übersetzung ;-).
http://jedi-apilib.sourceforge.net/
--> JEDI API Windows Headers (JWAPI) --> JwaPsApi
Da ist die PsApi schon übersetzt. ;-)
Boldar - Mo 29.12.08 12:48
mmh und wie schauts da mit der Lizenz aus?
Boldar - Mo 29.12.08 12:54
mmh aber was heisst das denn jetzt konkret? in dem Wikipedia Artikel steht sehr viel fachchinesich...
Könnte man z.B. den Code in Kommerziellen Projekten verwenden?
jaenicke - Mo 29.12.08 13:09
Ja, steht in der Lizenz ja, du musst nur die Bedingungen beachten. Z.B. müssen die Dateien unter der MPL auch als ganzes weiterhin darunter stehen, wenn du sie veränderst oder kopierst. Wenn du eine Unit unter der MPL einbindest, dann muss der Rest nicht unter die MPL, wenn du MPL-lizenzierten Code in eine Unit kopierst oder solchen Code veränderst, dann musst du die gesamte Unit unter die MPL stellen (und den Quelltext veröffentlichen).
Im Unterschied zur LGPL (u.a.) muss der MPL Code nicht eigenständig kompilierbar sein, es reicht die Abtrennung in abgeschlossene Dateien (Units).
Boldar - Mo 29.12.08 15:35
mmh also die Funktion ergibt bei mir immer komische Zeichen als ergebnis...
jaenicke - Mo 29.12.08 16:13
Ich sehs, CreateFileMapping schlägt fehl wie man sieht, jedenfalls beim Test eben. Ich weiß nicht warum, mal schauen. :nixweiss:
Boldar - Mo 29.12.08 16:15
mmh also bei mir scheints sporadisch manchmal zu gehen und manchmal nicht...
ich hasse Heisenbugs!!!!
jaenicke - Mo 29.12.08 16:25
Prüf jeweils ob das Handle überhaupt gültig ist. Bei mir hat gleich CreateFileMapping 0 zurückgegeben, aber das wurde nicht geprüft. Die "komischen Zeichen" waren der uninitialisierte Inhalt des Buffers.
Boldar - Mo 29.12.08 16:26
und wie prüft man auf ein gültiges Handle? indem man dann das ergebnis createfilemapping auswertet oder schon früher?
jaenicke - Mo 29.12.08 16:30
Wenn ein Handle 0 ist, ist es nicht gültig. Weder das deiner Datei noch die Rückgabewerte von z.B. CreateFileMapping sollten 0 sein.
Boldar - Mo 29.12.08 16:31
mmh jetzt gehts, aber dafür hab ich ein anderes Problem...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!