![]() |
FileExists aber Casesensitive
Hallo...
ich habe mal eine bescheidene Frage. Ich stehe ein wenig auf dem Schlauch. Ich muß nachschauen ob ein File Existiert: das mache ich mit FileExists(DasIstMeineDatei) Lieder ist das aber nicht CaseSensitive. Gibt es eine möglichkeit das ganze umzustricken? Das Problem ist eben das die Datei auch unter Linux genutzt wird und somit muß ich das CaseSensitive testen ob die Datei auch mit dieser Schreibweise vorhanden ist. Danke für Tipps und Anregungen. P.S. Ich hoffe ich bin hier im richtigen Bereich. |
Re: FileExists aber Casesensitive
Unter Windows geht das nicht. Nein.
Unter Windows ist 'DieseDatei' gleich 'diesedatei', deswegen kannst Du unter Windows auch keine zwei Dateien mit unterschiedlicher Groß/Klein-Schreibweise in einem Verzeichnis haben. |
Re: FileExists aber Casesensitive
Ich weiß nicht, ob das so funktioniert, aber mein erster Gedanke wäre: mit FindFirst suchen und bei Treffer SearchRec.Name mit dem gesuchten Namen vergleichen.
|
Re: FileExists aber Casesensitive
Zitat:
|
Re: FileExists aber Casesensitive
@DeddyH: ja, das geht
was auch ginge: eine Linux-Partition mounten, denn der Dateisystemtreiber dafür würde/müßte CaseSensitive arbeiten. |
Re: FileExists aber Casesensitive
Danke für die Tipps,
ich habe es jetzt so gelöst
Delphi-Quellcode:
//ListBox2.Items[i2] ist mein Dateiname
if FileExists(Laufwerk+ListBox2.Items[i2]) = True then begin if FindFirst(Laufwerk+ListBox2.Items[i2],faAnyFile,SR) =0 then begin if StrComp(PChar(SR.Name), PChar(ListBox2.Items[i2])) = 0 then begin ListBox3.Items.Add(ListBox2.Items[i2]); //Die richtigen Namen werden übernommen. end; end; FindClose(SR); end; |
Re: FileExists aber Casesensitive
Geil, doppelt gemoppelt. :mrgreen:
Du nimmst entweder FileExists oder die Lösung mit FindFirst. Beides ist imho nicht nötig. ;) //Edit: Ich würde natürlich FileExists nehmen... :mrgreen: |
Re: FileExists aber Casesensitive
Das erscheint mir doppelt gemoppelt. Wie wäre es denn so (ungetestet)?
Delphi-Quellcode:
[edit] Trotz fehlendem roten Kasten dieselbe Redewendung :lol: [/edit]
function FileExistsCaseSensitive(const Filename: TFilename): Boolean;
var SearchRec: TSearchRec; begin Result := FindFirst(Filename, faAnyFile, SearchRec) = 0; if Result then try Result := AnsiCompareStr(Filename, SearchRec.Name) = 0; finally SysUtils.FindClose(SearchRec); end; end; |
Re: FileExists aber Casesensitive
zum Vergleichen kann man auch mal die CompilerMagic ausnutzen und eventuell könnte man auch gleich noch mit prüfen, ob es auch wirklich 'ne Datei ist
Delphi-Quellcode:
function FileExistsCaseSensitive(const Filename: TFileName): Boolean;
var SR: TSearchRec; begin Result := FindFirst(Filename, faAnyFile, SR) = 0; if Result then FindClose(SR); Result := Result and (SR.Attr and faDirectory = 0) and (SR.Name = Filename); end;
Delphi-Quellcode:
function FileExistsCaseSensitive(const Filename: TFileName): Boolean;
var SR: TSearchRec; begin Result := FindFirst(Filename, faAnyFile and not faDirectory, SR) = 0; if Result then FindClose(SR); Result := Result and (SR.Name = Filename); end; [edit] und noch was Windowstypisches ... was passiert, wenn man als FileName den kurzen 8.3-Namen angibt?
Delphi-Quellcode:
function FileExistsCaseSensitive(const Filename: TFileName): Boolean;
var SR: TSearchRec; begin Result := FindFirst(Filename, faAnyFile, SR) = 0; if Result then FindClose(SR); Result := Result and (SR.Attr and faDirectory = 0) and ((SR.Name = Filename) or AnsiSameText(SR.FindData.cAlternateFileName, Filename)); end; |
Re: FileExists aber Casesensitive
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:26 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