Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Unterverzeichnisse erstellen (https://www.delphipraxis.net/196390-unterverzeichnisse-erstellen.html)

zeras 17. Mai 2018 19:11

Unterverzeichnisse erstellen
 
Hallo,

ich habe ein Programm, welches unter anderem Unterpfade auf einem Server erzeugen muss.
Wenn ich dem Pfad auf dem Server ein Laufwerk zugewiesen habe, funktioniert meine Routine zum Erzeugen von einem oder mehreren Unterpfaden.
Wenn ich das aber direkt mit dem UNC Pfad mache, geht das nicht.
Sollte das nicht das gleiche sein? Rechte müssen ja da sein, da ich bei der Laufwerkszuweisung die Unterpfade erzeugen kann.

WiPhi 17. Mai 2018 19:30

AW: Unterverzeichnisse erstellen
 
Ich mache sowas immer mit
Delphi-Quellcode:
ForceDirectories
http://docwiki.embarcadero.com/Libra...rceDirectories

Was verwendest du?

zeras 17. Mai 2018 20:32

AW: Unterverzeichnisse erstellen
 
Ich habe 3 verschiedene Funktionen getestet und bei allen das gleiche
Delphi-Quellcode:
function MkDirEx(bez: string): boolean;
var verz : string;

begin

//  Result := ForceDirectories(bez); //Test1 180517

//  TDirectory.CreateDirectory(bez); //Test2 180517


//Original
  if copy(bez, length(bez), 1) <> '\' then bez := bez + '\';
  result := False;
  verz := copy(bez, 1, 2);
  delete(bez, 1, 3);
  while length(bez) > 0 do begin
    verz := verz + '\' + copy(bez, 1, pos('\', bez) -1);
    delete(bez, 1, pos('\', bez));
    {$i-}
      mkdir(verz);
    {$i+}
    case IOresult of
         0,
         183 : begin end;
         else exit
    end;
  end;
  result := True;


End;
alle 3 gehen nicht.

Uwe Raabe 17. Mai 2018 21:03

AW: Unterverzeichnisse erstellen
 
Wie lang ist der gesamte UNC-Pfad?

zeras 17. Mai 2018 21:12

AW: Unterverzeichnisse erstellen
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1402390)
Wie lang ist der gesamte UNC-Pfad?

Muss ich morgen sehen, da dies auf Arbeit passiert.
Gibt es hier Beschränkungen?

KodeZwerg 17. Mai 2018 21:24

AW: Unterverzeichnisse erstellen
 
(bez: string), wie sieht der bez aus? Gib da mal ein Konkretes Beispiel.
Ein Unc Pfad und ein Lokal Pfad kann man nicht direkt vergleichen da der Unc gemapped sein kann (hat anderen Namen als physisch vorhanden ist)
Von daher, gebe da mal mehr Info's. Um einen Unc Pfad in den tatsächlichen zurück zu verwandeln, da kenne ich nur den Api Befehl "NetShareGetInfo". Mit String copy/delete usw. kommst Du so nie ans Ziel.

Beispiel:
Real = c:\test\klappt gemapped als "SharedTest".
UNC = \\MeinRechner\SharedTest
Wie will willst du mit String manipulation an "c:\test\klappt" rankommen?

Uwe Raabe 17. Mai 2018 22:10

AW: Unterverzeichnisse erstellen
 
Zitat:

Zitat von zeras (Beitrag 1402391)
Gibt es hier Beschränkungen?

Je nach Windows-Version und Einstellungen kann das auf 248 Zeichen beschränkt sein. Wird vom UNC-Pfad ein ausreichender Teil auf einen Buchstaben gemapt, könnte das dann schon wieder funktionieren.

Letztendlich landen alle deine drei Verfahren ja bei CreateDirectory.

KodeZwerg 17. Mai 2018 22:45

AW: Unterverzeichnisse erstellen
 
edit
Meine Lösung war anscheinend falsch, um Platz zu sparen entfernt.

KodeZwerg 17. Mai 2018 23:27

AW: Unterverzeichnisse erstellen
 
edit
Meine Lösung war anscheinend falsch, um Platz zu sparen entfernt.

himitsu 18. Mai 2018 00:22

AW: Unterverzeichnisse erstellen
 
Per se kann UNC mit längeren Namen umgehen. (auch wenn es nicht immer funktioniert)

Man kann jeweils bestehende und gerade erstellte Pfade kürzen, auf die "alten" 8.3-ShortNames, und so die 256 Zeichenlänge (
Delphi-Quellcode:
MAX_PATH - Length('C:\') + Length(#0)
) besser ausreizen.

KodeZwerg 18. Mai 2018 12:52

AW: Unterverzeichnisse erstellen
 
edit
Meine Lösung war anscheinend falsch, um Platz zu sparen entfernt.

zeras 18. Mai 2018 18:29

AW: Unterverzeichnisse erstellen
 
Also ich habe gerade nachgezählt, ohne Mapping ist der Pfad maximal 39 Zeichen lang, mit Mapping gerade mal 16 Zeichen. Die Begrenzung auf 248 Zeichen sollte damit eigentlich nicht wirken.

Dalai 18. Mai 2018 18:45

AW: Unterverzeichnisse erstellen
 
Erfolgt das Mapping des Netzlaufwerks unter einer bestimmten anderen Benutzerkennung? Erfordert die Freigabe diese andere Kennung? Ist die Freigabe sonst für jeden zugänglich?

Grüße
Dalai

zeras 18. Mai 2018 18:55

AW: Unterverzeichnisse erstellen
 
Zitat:

Zitat von Dalai (Beitrag 1402486)
Erfolgt das Mapping des Netzlaufwerks unter einer bestimmten anderen Benutzerkennung? Erfordert die Freigabe diese andere Kennung? Ist die Freigabe sonst für jeden zugänglich?

Grüße
Dalai

Es gibt zwei Personengruppen, die dort Pfade anlegen können. Nun sollte eine 3. Gruppe auf die Daten lesend zugreifen können. Diese Gruppe hat aber nicht immer den UNC Pfad so gemappt, wie die Personengruppe 1+2. Deshalb habe ich im Programm statt dem Mapping den UNC Pfad hinterlegt und hatte gedacht, dass alles soweit OK ist. Nun berichtete Gruppe 1, dass das Programm den Pfad nicht anlegen kann. Der Pfad kann aber von Gruppe 1 und 2 im Explorer angelegt werden.

Dalai 18. Mai 2018 19:41

AW: Unterverzeichnisse erstellen
 
Leider beantwortet das keine meiner Fragen.
Zitat:

Zitat von zeras (Beitrag 1402487)
Der Pfad kann aber von Gruppe 1 und 2 im Explorer angelegt werden.

Über welchen Weg genau? Netzlaufwerk oder direkt per UNC-Pfad?

Grüße
Dalai

zeras 18. Mai 2018 19:47

AW: Unterverzeichnisse erstellen
 
Zitat:

Zitat von Dalai (Beitrag 1402491)
Leider beantwortet das keine meiner Fragen.
Zitat:

Zitat von zeras (Beitrag 1402487)
Der Pfad kann aber von Gruppe 1 und 2 im Explorer angelegt werden.

Über welchen Weg genau? Netzlaufwerk oder direkt per UNC-Pfad?

Grüße
Dalai

Gute Idee. Das muss ich nochmal prüfen und gebe wieder Bescheid. Heute geht leider nicht mehr.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz