Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Dateirechte ermittlen (https://www.delphipraxis.net/118162-dateirechte-ermittlen.html)

olee 1. Aug 2008 17:15


Dateirechte ermittlen
 
Hi ich hab ein kleines Problem:

Dazu erst mal ein kleiner Codeschnipsel:
Delphi-Quellcode:
Function SearchInFile(FileName: String; SearchOpts: TSearchOpts): Boolean;
Var TexFile: TStringList;
Begin
  result := false;
  If (FileGetSize(FileName) > SearchOpts.MaxSInFileSize) And (SearchOpts.MaxSInFileSize > 0) Then exit;
  TexFile := TStringList.create;
  Try
    TexFile.LoadFromFile(FileName);
    If Pos(SearchOpts.seekStr, TexFile.CommaText) <> 0 Then result := true;
  Finally
    TexFile.Free;
  End;
End;
Dieser Code soll in verschiedenen Dateien nach einem Text suchen.

Mein Problem ist jetzt jedoch, dass es vorkommt, dass mein Programm keine Leserechte hat, was einen Fehler auslöst.

Hat vllt. einer ne idee, wie ich das vorher prüfen kann?


MFG
Björn

Darkface 1. Aug 2008 17:22

Re: Dateirechte ermittlen
 
Villeicht hilft dir da Try Except.

olee 1. Aug 2008 17:30

Re: Dateirechte ermittlen
 
schon probiert

dann kommt trotzdem ne Meldung:

Datei <...> kann nicht geöffnet werden. Der Prozess kann nicht auf Die Datei zugreifen,
da sie von einem anderen Prozess verwendet wird.

himitsu 1. Aug 2008 17:53

Re: Dateirechte ermittlen
 
Such mal im Forum nach Except(ion) ... diese Meldung wird vom Debugger angezeigt und ist nicht im Programm sichtbar (heißt dann, wenn es nicht im Debugger ausgeführt wird)

Und in den Debuggeroptionen kannst du notfalls die Anzeige derartiger Meldungen steuern.


Delphi-Quellcode:
Function SearchInFile(FileName: String; SearchOpts: TSearchOpts): Boolean;
Var TexFile: TStringList;
Begin
  Result := false;
  If (SearchOpts.MaxSInFileSize > 0)
    and (FileGetSize(FileName) > SearchOpts.MaxSInFileSize) Then Exit;
  Try
    TexFile := TStringList.create;
    Try
      TexFile.LoadFromFile(FileName);
      Result := Pos(SearchOpts.seekStr, TexFile.CommaText) <> 0;
    Finally
      TexFile.Free;
    End;
  Except
    //Result := false;
    {viele mögen e nicht, wenn die Exception nicht bearbeitet wird,
    aber Result ist ja schon False ^_^ }
  End;
End;
[/quote]

p80286 1. Aug 2008 18:00

Re: Dateirechte ermittlen
 
Hallo olee,

bevor Du Die Datei öffnest machs Du folgendes:
Delphi-Quellcode:
function ISFILEREADABLE(dateiname:string):boolean;
var
  edat textfile;
  dummy : string;
  amode : byte;
begin
  amode:=filemode;
  filemode:=0; {readonly}
  assgnfile(edat,dateiname);
  {$I-}
  reset(edat);
  {$I+}
  if ioresult>0 then begin
    result:=false;
    exit;
  end;
  {$I-}
   readln(edat,dummy);
   cosefile;
  {$I+}
  if ioresult>0 then result:=false
  else result:=true;
end;
mußt Du aber noch testen sollte aber funktionieren.
Mit $I fummelst Du an den Compilerschaltern herum die solltest Du zuerst checken.
Wenn Du den IO-Check bglobal ausschaltest, muß Du nach JEDER I/O-Operation IORESULT abfragen!

Gruß
K-H

olee 1. Aug 2008 18:00

Re: Dateirechte ermittlen
 
Ahh danke!

Ich habe nicht gewusst, dass ein try..finally block die exeptions anders abfängt als ein try..except block

Habs geändert und jetzt klappt es thx.

Das Ergebnis dieser Arbeit (und einiges mehr) ist als gemeinsames
Projekt mit custom noch in Entwicklung und bald dürften die ersten
Ergebnisse zu sehen sein *Spannung-mach*

olee 1. Aug 2008 18:02

Re: Dateirechte ermittlen
 
Danke p80286 aber das problem hats scih gelöst.

Es ging ja nur darum dass meine (Such)-Prozedur nicht durch so eine kleine Exception verlassen wird.

D.h. ich muss nicht unbedingt genau die Leserechte prüfen.

Aber trotzdem

DANKE für die Hilfe!


MFG
Björn

himitsu 1. Aug 2008 19:48

Re: Dateirechte ermittlen
 
Zitat:

muß Du nach JEDER I/O-Operation IORESULT abfragen
muß man nicht, den der wert wird nur bei einem Fehler gesetzt
und zurückgesetzt wird er bei Abruf von IORESULT.

Luckie 1. Aug 2008 21:37

Re: Dateirechte ermittlen
 
Zitat:

Zitat von olee
Ich habe nicht gewusst, dass ein try..finally block die exeptions anders abfängt als ein try..except block

finally fängt keine Fehler ab, es stellt nur sicher, dass der Code im finally-Abschnit auch bei einem Ausnahemefehler ausgeführt wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:42 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