AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Pfad beschreibbar

Ein Thema von zeras · begonnen am 23. Feb 2019 · letzter Beitrag vom 23. Feb 2019
Antwort Antwort
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.618 Beiträge
 
Delphi 12 Athens
 
#1

Pfad beschreibbar

  Alt 23. Feb 2019, 07:55
Ich habe folgende Funktion aus dem Netz kopiert, um zu prüfen, ob ich in einen Pfad schreiben kann oder nicht:

Delphi-Quellcode:
//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;
Mit dem 10.3.1 schlug Delphi vor, das Filehandle von Integer auf Cardinal zu ändern.
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.ä.?
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Pfad beschreibbar

  Alt 23. Feb 2019, 08:18
Warum nutzt Du nicht THandle?
Zitat:
function FileOpen(const FileName: string; Mode: LongWord): THandle;
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Pfad beschreibbar

  Alt 23. Feb 2019, 10:47
Das Programm kann aber auch auf ein Netzlaufwerk gelegt werden ... Hier sollte in das Verzeichnis geschrieben werden können,...
Gehe davon aus das bei ablage im Netz das schreiben im eigenen Verzeichnis auch nicht möglich ist.

Wie würdet ihr das lösen bzw. mit welcher Funktion? Vielleicht gibt es etwas mit TFile, TPath o.ä.?
Es ist schon das beste einen Versuch eine temporäre Datei anzulegen und dann den Windows-Fehlercode auszuwerten.
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
672 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Pfad beschreibbar

  Alt 23. Feb 2019, 11:26
Ich habe folgende Funktion aus dem Netz kopiert, um zu prüfen, ob ich in einen Pfad schreiben kann oder nicht:

Delphi-Quellcode:
//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);
Mit dem 10.3.1 schlug Delphi vor, das Filehandle von Integer auf Cardinal zu ändern.
Seitdem bekomme ich die Meldung im Programm "Zugriff verweigert".
Tja, man sollte auf die Hints des Compilers achten . Hat er Dir nicht gesagt, dass der Ausdruck (FileHandle >= 0) immer True ist?

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

  result := FileHandle <> INVALID_HANDLE_VALUE; ändern.
Peter Below

Geändert von peterbelow (23. Feb 2019 um 11:29 Uhr) Grund: layoutkorrektur
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.618 Beiträge
 
Delphi 12 Athens
 
#5

AW: Pfad beschreibbar

  Alt 23. Feb 2019, 12:03
Ich habe folgende Funktion aus dem Netz kopiert, um zu prüfen, ob ich in einen Pfad schreiben kann oder nicht:

Delphi-Quellcode:
//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);
Mit dem 10.3.1 schlug Delphi vor, das Filehandle von Integer auf Cardinal zu ändern.
Seitdem bekomme ich die Meldung im Programm "Zugriff verweigert".
Tja, man sollte auf die Hints des Compilers achten . Hat er Dir nicht gesagt, dass der Ausdruck (FileHandle >= 0) immer True ist?

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

  result := FileHandle <> INVALID_HANDLE_VALUE; ändern.
Danke für eure Tipps.
Habe jetzt diese Änderung eingebaut und funktioniert.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz