AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Gibts Alternativen zu File-/DirectoryExists?

Ein Thema von Jumpy · begonnen am 10. Mai 2011 · letzter Beitrag vom 25. Jul 2013
Antwort Antwort
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: Gibts Alternativen zu File-/DirectoryExists?

  Alt 10. Mai 2011, 15:07
Die Alternative baut man sich selber (die Fingerübung zum Feierabend)
Delphi-Quellcode:
type
  TFileDirExistsRet = ( fdeNo, fdeFile, fdeDir );

function FileDirExists( const FileOrDir : string ) : TFileDirExistsRet;
begin
  if DirectoryExists( FileOrDir )
  then
    Result := fdeDir
  else if FileExists( FileOrDir )
  then
    Result := fdeFile
  else
    Result := fdeNo;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.045 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

AW: Gibts Alternativen zu File-/DirectoryExists?

  Alt 10. Mai 2011, 16:54
Da als Delphi Version 2010 angegeben ist: zieh dir mal die IOUtils.pas rein

Alternativ die JclFileUtils.pas aus der JCL.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.384 Beiträge
 
Delphi 12 Athens
 
#3

AW: Gibts Alternativen zu File-/DirectoryExists?

  Alt 10. Mai 2011, 17:36
und noch 'ne Fingerüberung nach dem Feierabend

Delphi-Quellcode:
type
  TFileDirExistsRet = (fdeNo, fdeFile, fdeDir);

function FileDirExists(const FileOrDir: String): TFileDirExistsRet;
var
  FindFileData: TWIN32FindData;
begin
  FindFileData.dwFileAttributes := INVALID_FILE_ATTRIBUTES;
  Windows.FindClose(FindFirstFile(PChar(FileOrDir), FindFileData));
  if FindFileData.dwFileAttributes = INVALID_FILE_ATTRIBUTES then
    Result := fdeNo
  else if FindFileData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
    Result := fdeFile
  else
    Result := fdeDir;
end;

// oder

function FileDirExists(const FileOrDir: String): Boolean;
var
  FindFileData: TWIN32FindData;
begin
  FindFileData.dwFileAttributes := INVALID_FILE_ATTRIBUTES;
  Windows.FindClose(FindFirstFile(PChar(FileOrDir), FindFileData));
  Result := FindFileData.dwFileAttributes = INVALID_FILE_ATTRIBUTES;
end;
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Gibts Alternativen zu File-/DirectoryExists?

  Alt 10. Mai 2011, 20:58
@himitsu
Nur meinen Code kann man auf Anhieb begreifen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Gibts Alternativen zu File-/DirectoryExists?

  Alt 10. Mai 2011, 21:05
Zumindest die kurze Variante geht noch kürzer (Ok, hab' geschaut woher die SysUtils Funktionen die Infos holen):
Delphi-Quellcode:
function FileDirExists(s: String): Boolean;
begin
  Result := GetFileAttributes(PChar(s)) <> $FFFFFFFF;
end;
Result kann man natürlich noch auswerten für eine differenzierte Rückgabe, aber dann ist es auch nicht mehr kürzer.
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.740 Beiträge
 
Delphi 6 Enterprise
 
#6

AW: Gibts Alternativen zu File-/DirectoryExists?

  Alt 11. Mai 2011, 13:24
Hallo und vielen Dank. Im nächste frag ich immer kurz vor Feierabend, wenn eure Finger dann so locker sitzen.

Zum Problem: Die Funktion braucht ja mehr als nur eine Boolche Rückgabe, deswegen ist die Anregung mit dem Record oder ist das eine Enumeration

Delphi-Quellcode:
type
  TFileDirExistsRet = ( fdeNo, fdeFile, fdeDir );
schonmal die wertvollste. Natürlich auch die Umsetzungsvorschläge.

Konkret muss ich mir dazu noch klar werden, was ich genau will. Ich denke da an sowas, wo mehrere Rückgabewerte möglich sind, z.B. wenn Filexists dann ja auch DirectoryExists. Im ObjectInspector gibts ja so Dinge. Heißen die dann Sets? Wenn ich dann so Fragen würde:

if fdeFile in FileDirExists(MeinPfadoderDatei) Das ist doch auch das, wo man die Dinge mit AND und OR verknüpft. War doch vor kurzem auch so ein Thread dazu. Such ich gleich mal.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.384 Beiträge
 
Delphi 12 Athens
 
#7

AW: Gibts Alternativen zu File-/DirectoryExists?

  Alt 11. Mai 2011, 13:45
Delphi-Quellcode:
type
  TEnum = ( x, y, z );
  TSet1 = TEnum;

  TSet2 = set of ( x, y, z );

  TRecord = record
    a: Integer;
    b: String;
  end;
Enum = enthält mehrere Werte, aber jeweils immer nur Einen gleichzeitig
Set = kann mehrere Werte gleichzeitig aufnehmen (oder Keinen)
Record = mehrere Variablen in einem

Ein Boolean ist quasi ebenfalls ein Enumerator, mit zwei Werten.
type Boolean = (False, True);

mit SET
if fdeFile in FileDirExists(MeinPfadoderDatei) then .
if FileDirExists(MeinPfadoderDatei) = [fdeFile] then .
if FileDirExists(MeinPfadoderDatei) = [fdeFile, fdeDir] then .
und ENUM
if FileDirExists(MeinPfadoderDatei) = fdeFile then .
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (11. Mai 2011 um 13:47 Uhr)
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#8

AW: Gibts Alternativen zu File-/DirectoryExists?

  Alt 25. Jul 2013, 07:58
Zumindest die kurze Variante geht noch kürzer (Ok, hab' geschaut woher die SysUtils Funktionen die Infos holen):
Delphi-Quellcode:
function FileDirExists(s: String): Boolean;
begin
  Result := GetFileAttributes(PChar(s)) <> $FFFFFFFF;
end;
Result kann man natürlich noch auswerten für eine differenzierte Rückgabe, aber dann ist es auch nicht mehr kürzer.
Ist NICHT das Gleiche wie in #5.

Funktioniert in WIN 8 nicht, aber kurzer Code in #5 geht.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 21:06 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