AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Existenz langer Pfade

Ein Thema von tomkupitz · begonnen am 3. Jul 2017 · letzter Beitrag vom 4. Jul 2017
Antwort Antwort
SneakyBagels
(Gast)

n/a Beiträge
 
#1

AW: Existenz langer Pfade

  Alt 4. Jul 2017, 11:53
Siehe:

Ich verstehe nicht - Willst du überprüfen ob es ein "langer Pfad" ist, also länger ist als die Windows-Konstante "MAX_PATH"? Oder willst du wissen ob der Pfad in UNC-Notation (\\host\path) ist?

Für letzteren Fall: Nimm einfach TPath.IsUncPath()

Die Antwort auf dein "Warum funktioniert das nicht?" ist dass du explizit nach lokal fragst.
https://de.wikipedia.org/wiki/Uniform_Naming_Convention
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
440 Beiträge
 
#2

AW: Existenz langer Pfade

  Alt 4. Jul 2017, 13:33
Je nachdem ob es sich um einen UNC-Pfad handelt, oder um ein lokales Laufwerk muss man für lange Pfade unterschiedliche Präfixes anfügen. Mein erster Versuch daraus eine Funktion zu machen:

Delphi-Quellcode:
function GetPrefixedPath(const aPath: string): string;
begin
  if aPath.StartsWith('\\')
  then begin
    if System.IOUtils.TPath.GetExtendedPrefix(aPath)=TPathPrefixType.pptNoPrefix
    then
      Result := '\\?\UNC\' + copy(aPath, 3, MaxInt)
    else
      Result := aPath;
  end
  else
    Result := '\\?\' + aPath;

Geändert von samso ( 4. Jul 2017 um 14:33 Uhr) Grund: Wenn der Pfad nicht mit "\\" beginnt, kann der Präfix direkt angefügt werden
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#3

AW: Existenz langer Pfade

  Alt 4. Jul 2017, 13:48
Diese Funktion verstehe ich nicht ganz.
Könntest du ein paar Beispiele (Text, hier im Forum) anfügen?

So wie ich zuvor vielleicht
Delphi-Quellcode:
 ShowMessage( getUNCPath('Y:\') ); // Y = Netzlaufwerk. Resultat => Y:\
 ShowMessage( getUNCPath('C:\') ); // C = Systemlaufwerk. Resultat => \\?\C:\
Wo wir schon einmal dabei sind:
\\?\ lässt sich auch auf Netzlaufwerke anwenden, wenn sie gemounted sind (also keine reine IP).

Ich würde wenn dann ja eher so machen
Delphi-Quellcode:
function getUNCPath(const aPath: string): string;
begin
 Result := aPath;

 if not aPath.StartsWith('\\') then // <=== hinzugefügt, damit aus \\192.168.0.1 nicht \\?\\\192.168.0.1 gemacht wird
  if TPath.GetExtendedPrefix(aPath) = TPathPrefixType.pptNoPrefix then
   Result:= '\\?\' + aPath;
end;

function removeUNCFromPath(const aPath: string): string;
begin
 Result := aPath;

 if TPath.GetExtendedPrefix(aPath) = TPathPrefixType.pptExtended then // \\?\ present
  Delete(Result, 1, 4);
end;
Aber was ist jetzt richtig-er bzw überhaupt richtig und funktionstüchtig? Würde mich auch brennend interessieren.

Geändert von SneakyBagels ( 4. Jul 2017 um 14:26 Uhr)
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
440 Beiträge
 
#4

AW: Existenz langer Pfade

  Alt 4. Jul 2017, 14:37
Der Präfix \\?\ darf immer angefügt werden, weil das der Windows-Api lediglich mitteilt "Achtung der Pfad kann länger als MAX_PATH Zeichen sein"

"C:\EinPfad\usw.txt" => "\\?\C:\EinPfad\usw.txt"
"Y:\EinPfad\usw.txt" => "\\?\Y:\EinPfad\usw.txt"
"COM45:" => "\\?\COM45:"
"\\QNAP\MyShare\Daten\usw.txt" => "\\?\UNC\QNAP\MyShare\Daten\usw.txt"

Geändert von samso ( 5. Jul 2017 um 04:41 Uhr) Grund: Kommentar hinzugfügt
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#5

AW: Existenz langer Pfade

  Alt 4. Jul 2017, 14:45
Zitat:
"\\QNAP\MyShare\Daten\usw.txt" => "\\?\UNC\QNAP\MyShare\Daten\usw.txt"
Wenn du deiner Funktion \\192.168.0.1\volumenname übergibst, dann würde \\?\UNC\192.168.0.1\volumenname daraus werden was in einem Fehler resultiert.
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
440 Beiträge
 
#6

AW: Existenz langer Pfade

  Alt 4. Jul 2017, 14:49
Wenn du deiner Funktion \\192.168.0.1\volumenname übergibst, dann würde \\?\UNC\192.168.0.1\volumenname daraus werden was in einem Fehler resultiert.
Habe ich bei mir gerade mit Windows 10 getestet. Ergibt bei mir keinen Fehler.
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#7

AW: Existenz langer Pfade

  Alt 4. Jul 2017, 14:51
Ist \\?\UNC\192.168.0.1\volumenname (oder welche IP auch immer, aber es muss eine IP sein) bei dir erreichbar mit \\?\UNC\ davor?

Edit:
gerade "\\?\UNC\192.168.0.1\volumenname" (Festplatte am Router die so auch zum Test existiert) unter Windows 10 getestet mit Resultat
Zitat:
[Window Title]
Explorer

[Content]
Die Datei "\\?\UNC\192.168.0.1\volumenname" wurde nicht gefunden. Überprüfen Sie die Schreibweise, und wiederholen Sie den Vorgang.

[OK]

Geändert von SneakyBagels ( 4. Jul 2017 um 14:54 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:50 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