![]() |
Pfad beschreibbar
Ich habe folgende Funktion aus dem Netz kopiert, um zu prüfen, ob ich in einen Pfad schreiben kann oder nicht:
Delphi-Quellcode:
Mit dem 10.3.1 schlug Delphi vor, das Filehandle von Integer auf Cardinal zu ändern.
//hier schauen wir nach, ob wir Dateien ins Programmverzeichnis schreiben können
Function IsFileWritetable(const FileName: String): Boolean; var FileHandle : Cardinal; //18.02.19 -> war vorher integer OldErrorMode: Cardinal; begin OldErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS); try FileHandle := FileOpen(FileName, fmOpenWrite); result := (FileHandle >= 0); if result then begin FileClose(fileHandle); end; finally SetErrorMode(OldErrorMode); end; end; Seitdem bekomme ich die Meldung im Programm "Zugriff verweigert". Hintergrund: Ich habe ein Programm, welches normalerweise ins Programmverzeichnis installiert wird. Danach wird die Registrierung ins Roaming Verzeichnis geschrieben. Hier benötige ich die Abfrage, ob ich schreiben darf. Das Programm kann aber auch auf ein Netzlaufwerk gelegt werden, wo die User dann nur einen Link nutzen müssen. Hier sollte in das Verzeichnis geschrieben werden können, wo auch das Programm liegt. Wie würdet ihr das lösen bzw. mit welcher Funktion? Vielleicht gibt es etwas mit TFile, TPath o.ä.? |
AW: Pfad beschreibbar
Warum nutzt Du nicht THandle?
Zitat:
K-H |
AW: Pfad beschreibbar
Zitat:
Zitat:
Alles andere ist zu komplex wenn man im Vorfeld versucht Rechte abzufragen. Da kommt neben der NTFS-Berechtigung auch noch evtl. die Berechtigung über Netzwerkfreigaben dazu und auch evtl. laufenden Sicherheitsoftware könnte dazwischenfunken. |
AW: Pfad beschreibbar
Zitat:
Das kommt vom Wechsel auf Cardinal. Wenn das File nicht geöffnet werden kann gibt FileOpen INVALID_HANDLE_VALUE zurück, was High(Cardinal) ist (interpretiert als Integer also -1). Daher hat das geklappt solange FileHandle als Integer deklariert war. Jetzt mußt Du das Statement in
Delphi-Quellcode:
ändern.
result := FileHandle <> INVALID_HANDLE_VALUE;
|
AW: Pfad beschreibbar
Zitat:
Habe jetzt diese Änderung eingebaut und funktioniert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz