Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Pfad zu einer Datei herausfinden (https://www.delphipraxis.net/141988-pfad-zu-einer-datei-herausfinden.html)

VizeTE 20. Okt 2009 10:19


Pfad zu einer Datei herausfinden
 
Hallo,

unter Windows kann ich doch einfach eine Datei ohne Angabe des Pfades öffnen.
Windows sucht dann zunächst im Ausführungsverzeichnis, dann im den Verzeichnissen
in der Windwos-Path-Variabeln und was weiß ich wo noch alles.

Wenn ich auf dieser Weise eine Datei geöffnet habe gibt es dann einen Weg
den Pfad auf die Datei herauszubekommen?


Danke schon mal ;)

himitsu 20. Okt 2009 10:26

Re: Pfad zu einer Datei herausfinden
 
Zitat:

Zitat von VizeTE
unter Windows kann ich doch einfach eine Datei ohne Angabe des Pfades öffnen.

ja

Zitat:

Zitat von VizeTE
Windows sucht dann zunächst im Ausführungsverzeichnis, dann im den Verzeichnissen
in der Windwos-Path-Variabeln und was weiß ich wo noch alles.

nein

Es kommt drauf an, wie du die Datei öffnest.

DLLs via LoadLibrary werden z.B. so gesucht.
Aber z.B. AssignFile oder Stream.LoadFromFile öffnet dagegen immer nur im aktuellen Programmverzeichnis.

Zitat:

Zitat von VizeTE
Wenn ich auf dieser Weise eine Datei geöffnet habe gibt es dann einen Weg
den Pfad auf die Datei herauszubekommen?

ich würde einfach das aktuelle Programmverzeichnis auslesen
> GetCurrentDir und Co.

Muetze1 20. Okt 2009 10:54

Re: Pfad zu einer Datei herausfinden
 
Zitat:

Zitat von himitsu
Zitat:

Zitat von VizeTE
Windows sucht dann zunächst im Ausführungsverzeichnis, dann im den Verzeichnissen
in der Windwos-Path-Variabeln und was weiß ich wo noch alles.

nein

Es kommt drauf an, wie du die Datei öffnest.

DLLs via LoadLibrary werden z.B. so gesucht.
Aber z.B. AssignFile oder Stream.LoadFromFile öffnet dagegen immer nur im aktuellen Programmverzeichnis.

Bei DLLs kann man es explizit umstellen bzw. festlegen ob dieser Vorgang gemacht werden soll. Die Angabe irgendeines Pfades vor dem DLL Namen bei LoadLibrary() setzt die schon außer Kraft (also auch z.B. ein ".\").

Und Programmverzeichnis ist in diesem Falle falsch sondern einfach nur aktuelles Verzeichnis. Das Programmverzeichnis ist es schon nach dem nächsten Open- oder Savedialog nicht mehr, wenn der Nutzer das Verzeichnis und/oder Laufwerk wechselt.

joachimd 20. Okt 2009 10:59

Re: Pfad zu einer Datei herausfinden
 
Zitat:

Zitat von VizeTE
unter Windows kann ich doch einfach eine Datei ohne Angabe des Pfades öffnen.
Windows sucht dann zunächst im Ausführungsverzeichnis, dann im den Verzeichnissen
in der Windwos-Path-Variabeln und was weiß ich wo noch alles

Delphi-Referenz durchsuchenSearchPath

VizeTE 20. Okt 2009 12:49

Re: Pfad zu einer Datei herausfinden
 
Zitat:

Zitat von Muetze1
Zitat:

Zitat von himitsu
Zitat:

Zitat von VizeTE
Windows sucht dann zunächst im Ausführungsverzeichnis, dann im den Verzeichnissen
in der Windwos-Path-Variabeln und was weiß ich wo noch alles.

nein

Es kommt drauf an, wie du die Datei öffnest.

DLLs via LoadLibrary werden z.B. so gesucht.
Aber z.B. AssignFile oder Stream.LoadFromFile öffnet dagegen immer nur im aktuellen Programmverzeichnis.

Bei DLLs kann man es explizit umstellen bzw. festlegen ob dieser Vorgang gemacht werden soll. Die Angabe irgendeines Pfades vor dem DLL Namen bei LoadLibrary() setzt die schon außer Kraft (also auch z.B. ein ".\").

Und Programmverzeichnis ist in diesem Falle falsch sondern einfach nur aktuelles Verzeichnis. Das Programmverzeichnis ist es schon nach dem nächsten Open- oder Savedialog nicht mehr, wenn der Nutzer das Verzeichnis und/oder Laufwerk wechselt.

Ok, das hätte ich dazuschreiben können: Es handelt sich nicht um eine dll sondern um eine ini. Wenn ich dort bei TIniFile.Create(...) als Parameter "myini.ini" angebe wird die Datei geöffnet auch wenn sie z.B. im Windows-Verzeichnis liegt.

Zitat:

Zitat von joachimd
Zitat:

Zitat von VizeTE
unter Windows kann ich doch einfach eine Datei ohne Angabe des Pfades öffnen.
Windows sucht dann zunächst im Ausführungsverzeichnis, dann im den Verzeichnissen
in der Windwos-Path-Variabeln und was weiß ich wo noch alles

Delphi-Referenz durchsuchenSearchPath

Ja, genau das habe ich gesucht: Vollständiger Dateiname gemäss PATH
Danke!

himitsu 20. Okt 2009 12:50

Re: Pfad zu einer Datei herausfinden
 
eine INI ohne Pfadangabe landet im Windows-Verzeichnis (z.B. "C:\Windows" und so)

Zitat:

If this parameter does not contain a full path to the file, the system searches for the file in the Windows directory.
> MSDN-Library durchsuchenGetPrivateProfileString

MarcoWarm 20. Okt 2009 13:05

Re: Pfad zu einer Datei herausfinden
 
Zitat:

Zitat von himitsu
eine INI ohne Pfadangabe landet im Windows-Verzeichnis (z.B. "C:\Windows" und so

Das stimmt nur bedingt. Um die Sache komplizierter zu machen, gibts ab WinXP so genannte IniFileMappings (zu finden unter
Code:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\IniFileMapping
Wenn du also TIniFile.Create('Win.ini') sagst, landest du eigentlich in der Registry ;-) Die Datei ist (laut kommentar in selbiger) nur noch für 16 Bit zuständig.

Gruß
Marco

himitsu 20. Okt 2009 13:57

Re: Pfad zu einer Datei herausfinden
 
IniFileMappings:
joar, wo man ab Vista ja eh keine Schreibrechte mehr im Windowsverzeichnis hat ....

aber virtuell liegen diese Daten dann dennoch in C:\Windows



nja, ich sagt'e ja: "es kommt drauf an was man wie speichert" und dann gibt es davon abhängig verschiedene Orte.

MarcoWarm 20. Okt 2009 14:05

Re: Pfad zu einer Datei herausfinden
 
Zitat:

Zitat von himitsu
aber virtuell liegen diese Daten dann dennoch in C:\Windows

:gruebel: Die Daten liegen weder virtuell noch real in C:\Windows, weil es einfach keine Ini Datei gibt.

edit... aber egal... das wird mir dann doch zu philosophisch...
edit2 ... himitsu hat ja recht
Zitat:

Zitat von msdn
lpFileName [in]

The name of the initialization file. If this parameter does not contain a full path to the file, the system searches for the file in the Windows directory.



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