Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Laufwerk C:\ einlesen und erfahren das C:\Programme ein link ist (https://www.delphipraxis.net/213713-laufwerk-c-%5C-einlesen-und-erfahren-das-c-%5Cprogramme-ein-link-ist.html)

DelTurbo 13. Sep 2023 14:31

Laufwerk C:\ einlesen und erfahren das C:\Programme ein link ist
 
Hi,
also ich habe nun alles was mir eingefallen bei Google und hier gesucht. Ich komme nicht auf die Lösung.
Entweder such ich falsch oder es ist nicht so einfach.

Ich möchte mit FindFirst und FindNext (wenn es damit geht) die Directory Struktur von C: einlesen. Dabei möchte ich feststellen ob das was ich grade bekommen habe (z.b. C:\Progamme) ein link ist und wo er hinzeigt. Ich habe alle Versionen die in diesem Thread stehen probiert. Ich bekomme immer den gleichen Namen zurück allerdings ohne Laufwerk. Also das C: fehlt.

Nun weiß ich echt nicht mehr weiter. Was mache ich falsch? bzw. wie macht man sowas?
Und Unix hatte ich das ruckzuck. Das ist aber leider nicht Portierbar.

Vielen dank im Voraus

himitsu 13. Sep 2023 14:38

AW: Laufwerk C:\ einlesen und erfahren das C:\Programme ein link ist
 
C:\Programme ist kein Link, das ist eine Lokalisierung an "C:\Program Files" und kommt aus der Desktop.ini, in diesem Verzeichnis.

Wenn du sowas automatisch übersetzt haben willst, dann mußt du mit den ShellFolder-Interfaces arbeiten.
https://learn.microsoft.com/de-de/wi...2/shell/folder



OK, in deutschen Windowsen gibt es für viele Verzeichnisse doch einen "defekten" Link Junction, falls wer über die normale FileAPIs versucht den übersetzten Namen zu benutzen.
Müssten die da nicht in den FileAttributen was drin haben?

[add]
Bei Google suchendelphi Junction :zwinker:
https://stackoverflow.com/questions/...tion-in-delphi

DelTurbo 13. Sep 2023 14:44

AW: Laufwerk C:\ einlesen und erfahren das C:\Programme ein link ist
 
Huhu,
das mag sein. Aber ich habe mit mklink selber Links angelegt. Bei denen klappt auch nix. Leider. Könntest du ansonsten eventuell noch 1-2 Schlagworte mitgeben oder hast du eventuell ein Beispiel. Ich glaube da würde ich mich nass machen :-D

Hehe, hast du eine Glaskugel oder sowas?!? Während ich geschrieben habe haust du das schon rein, irre...

Uwe Raabe 13. Sep 2023 14:47

AW: Laufwerk C:\ einlesen und erfahren das C:\Programme ein link ist
 
Ich kann gerade nicht sagen, ob das in D2007 schon verfügbar ist, aber in aktuellen Delphi-Versionen gibt es in System.Sysutils ein FileGetSymLinkTarget.

DelTurbo 13. Sep 2023 14:52

AW: Laufwerk C:\ einlesen und erfahren das C:\Programme ein link ist
 
Leider nicht.

DelTurbo 13. Sep 2023 15:08

AW: Laufwerk C:\ einlesen und erfahren das C:\Programme ein link ist
 
Mit JclNTFS klappt es.

Vielen dank an euch, ich hätte NIE gefunden.

DelTurbo 13. Sep 2023 15:46

AW: Laufwerk C:\ einlesen und erfahren das C:\Programme ein link ist
 
Hmmm,
tut mir leid, aber noch eine Frage. Wie finde ich heraus das C:\Programme auf C:\Program Files zeigt? Mount ich es unter Unix kann man es sehen. Das find ich leider nicht in der Unit.

Unix ausgabe:
Code:
drwxrwxrwx 1 root root      4096 Sep 11 10:21  ProgramData
lrwxrwxrwx 2 root root        18 Mar 18  2022  Programme -> '/mnt/Program Files'
Nachtrag: bei NtfsIsFolderMountPoint bekomme ich ein True zurück.

Noch ein Nachtrag:
Das läuft auf keinem Windows.

Das Sysinternals läuft einwandfrei.

Code:
C:\>junction.exe C:\Programme

Junction v1.07 - Creates and lists directory links
Copyright (C) 2005-2016 Mark Russinovich
Sysinternals - www.sysinternals.com

C:\Programme: JUNCTION
   Print Name    : C:\Program Files
   Substitute Name: C:\Program Files


C:\>junc.exe C:\Programme
Directory: "C:\Programme"
Junctions found: 0

C:\>

Dalai 13. Sep 2023 17:35

AW: Laufwerk C:\ einlesen und erfahren das C:\Programme ein link ist
 
Der vorige Inhalt des Beitrags war falsch, hab doch tatsächlich die Junction C:\Programme übersehen :oops:.

himitsu 13. Sep 2023 19:52

AW: Laufwerk C:\ einlesen und erfahren das C:\Programme ein link ist
 
Zitat:

junction.exe
CMD: DIR kann man auch dafür verwenden

Code:
dir /AL C:\
dir /AL C:\Users
dir /AL C:\Users\%username%
Code:
dir /AL /S C:\

DelTurbo 14. Sep 2023 09:18

AW: Laufwerk C:\ einlesen und erfahren das C:\Programme ein link ist
 
Huhu,
da waren 2 Fehler in dem ding von sourceforce. Die habe ich grade geändert. Nun weiß ich nicht ob ich die sagen darf oder hochladen soll mit Quellen Angabe.

Die Ausgabe unter Delphi ist nun wie folgt.

Code:
Directory: "C:\Programme"
Junction: "C:\Programme" --> "C:\Program Files"
Junctions found: 1
Oder wenn es einfach eine Dir ist, so:
Code:
Directory: "C:\tmp"
Junctions found: 0

himitsu 14. Sep 2023 10:10

AW: Laufwerk C:\ einlesen und erfahren das C:\Programme ein link ist
 
Das Problem ist, dass aus irgendwelchen Gründen im Windows "diese" Links nicht funktionieren. (bzw. ich vergesse immer den Grund)

Meistens knallen sie direkt beim Zugriff, aber manchmal ist es ganz schlimm, weil sieht so aus als ob es ginge, aber ...

Delphi-Quellcode:
C:\Users\**********>cd \

C:\>cd Programme

C:\Programme>dir
 Datenträger in Laufwerk C: ist OS
 Volumeseriennummer: ****-****

 Verzeichnis von C:\Programme

Datei nicht gefunden

C:\Programme>cd ..

C:\>cd Program Files

C:\Program Files>dir
 Datenträger in Laufwerk C: ist OS
 Volumeseriennummer: ****-****

 Verzeichnis von C:\Program Files

30.08.2023  16:10    <DIR>         .
30.08.2023  16:10    <DIR>         ..
31.08.2017  13:27    <DIR>         7-Zip
25.02.2021  14:46    <DIR>         AdoptOpenJDK
09.08.2021  14:08    <DIR>         Application Verifier
...

DelTurbo 14. Sep 2023 10:33

AW: Laufwerk C:\ einlesen und erfahren das C:\Programme ein link ist
 
Hmm, nun hast du mich verwirrt. :?

Aber du hast recht.

Es gibt da echt verschiedene Sachen. Wenn man mit /D eine "Verknüpfung" auf ein Netzwerk Laufwerk macht ist das was total anderes als mit /J lokal.

[Falsch]Und was ich gemerkt habe ist das
Delphi-Quellcode:
NtfsGetJunctionPointDestination
den letzten buchtstaben weglässt. Also die länge stimmt nicht anstatt xxxx\Test kommt xxxx\Tes zurück.[/Falsch]
Es scheint das der letzte Buchstabe vorne steht?!?

Aber mit dem jnuc klappt es einwandfrei. Bisher. Habe noch nicht alles getestet.

Man war/ist das bei Unix einfach.

DelTurbo 14. Sep 2023 13:55

AW: Laufwerk C:\ einlesen und erfahren das C:\Programme ein link ist
 
So,
eine Rückmeldung damit das nicht offen bleibt. Ich bekomme es nun so:
Code:
C:\codetyphon-6.5\!Projekte --> UNC\Server\Programmierung\Projekte\
C:\codetyphon-7.1\!Projekte --> UNC\Server\Programmierung\Projekte\
C:\codetyphon-8.1\!Projekte --> UNC\Server\Programmierung\Projekte\
C:\Dokumente und Einstellungen --> C:\Users
C:\iscsi --> \??\Volume{dae1f45f-9f50-11e6-82e8-d0509934602c}\
C:\Program Files\Gemeinsame Dateien --> C:\Program Files\Common Files
C:\Program Files\Windows NT\Zubehör --> C:\Program Files\Windows NT\Accessories
C:\ProgramData\Anwendungsdaten --> C:\ProgramData
Dort sind "Symlinks/Junctions" auf Netzwerk Laufwerke bei und leider einer den ich nicht wieder hinbekomme.
Code:
C:\iscsi --> \??\Volume{dae1f45f-9f50-11e6-82e8-d0509934602c}\
Bei einem "dir" zeigt er es auch so an.
Code:
18.06.2022  14:12    <JUNCTION>    iscsi [\??\Volume{dae1f45f-9f50-11e6-82e8-d0509934602c}\]
Der zeigt auf ein iSCSI Laufwerk, bzw. auf die Partition. Gemacht habe ich den beim Formatieren. Kein Buchstabe zu geordnert sonder in eine Direcoty laufen lassen. Wie sowas mit mklink wieder hinbekommen soll ist mir im moment noch ein Rätsel.


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