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 ✔ Kann über WinApi kein Verzeichnis erstellen, über Explorer schon (https://www.delphipraxis.net/206054-kann-ueber-winapi-kein-verzeichnis-erstellen-ueber-explorer-schon.html)

Der schöne Günther 13. Nov 2020 16:35


✔ Kann über WinApi kein Verzeichnis erstellen, über Explorer schon
 
Folgendes Programm kann kein Verzeichnis erstellen:

Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}


uses
  System.SysUtils,
  System.IOUtils,
  WinApi.Windows;

const
   name = 'helloWorld';
begin
   TFile.Create(name);

   if not System.SysUtils.CreateDir(name) then
      WriteLn( SysErrorMessage( GetLastError() ) );

   ReadLn;
end.
Delphi-Quellcode:
System.SysUtils.CreateDir(..)
ist im Endeffekt nur ein Alias für
Delphi-Quellcode:
Winapi.Windows.CreateDirectoryW(PChar(name), nil)
.
Es gibt False zurück und meint die Datei würde schon existieren. Richtig, die Datei existiert. Sollte aber niemanden stören, schließlich will ich ein Verzeichnis anlegen, keine Datei!

Im Explorer hingegen kann ich problemlos ein Verzeichnis mit dem Namen "helloWorld" anlegen. Was stimmt hier nicht?

Ich habe in der Doku zu CreateDirectory keinen Hinweis finden können

Klaus01 13. Nov 2020 16:40

AW: Kann über WinApi kein Verzeichnis erstellen, über Explorer schon
 
Liste der Anhänge anzeigen (Anzahl: 1)
Im Explorer geht das auch nicht, wenn eine Datei mit gleichem Namen im Ordner existister.

Die Datei heißt bei Dir helloWorld ohne irgendwelche Extension.

Grüße
Klaus

Der schöne Günther 13. Nov 2020 16:46

AW: Kann über WinApi kein Verzeichnis erstellen, über Explorer schon
 
Ich muss irgend etwas Dummes übersehen haben, tatsächlich.

Vielen Dank, wieder was gelernt.

Dalai 13. Nov 2020 16:49

AW: Kann über WinApi kein Verzeichnis erstellen, über Explorer schon
 
Es kann in einem Verzeichnis immer nur ein Objekt mit demselben Namen geben, sei es Datei, Verzeichnis, Symlink oder Hardlink. Wie sollte sonst eine Referenzierung eines Objekts möglich sein, wenn mehrere mit demselben Namen existieren, die Referenzierung aber per Name passiert? Das geht schlicht nicht. Daher ist es nicht möglich, in einem Verzeichnis mehrere Objekte desselben Namens anzulegen. Und ich kenne auch keine Plattform und Dateisystem, bei dem das ginge, solange das Objekt ausschließlich per Name angesprochen wird.

BTW: Ein Verzeichnis ist letztlich auch nur eine Datei mit einem zusätzlichen Attribut.

Grüße
Dalai

himitsu 13. Nov 2020 17:11

AW: ✔ Kann über WinApi kein Verzeichnis erstellen, über Explorer schon
 
Nicht nur dass eine gleichnamige Datei existiert ... die ist/bleibt auch noch geöffnet.
TFile.Create ohne Freigabe des Streams?

Und relative Pfade, ohne definiertem Urspung (CurrentDirectory), sind sowieso immer eine echt dumme Idee.



Zitat:

Es kann in einem Verzeichnis immer nur ein Objekt mit demselben Namen geben
Physisch ja, "optisch" nein.

In einem deutschen Windows gibt es C:\Programm Files, welches als C:\Programme angezeigt wird, und es gibt auch nochmal ein C:\Programme als unsichtbaren "Link" (hidden+system), damit keiner auf die blöde Idee kommt etwas in C:\Programme speichern zu wollen.

Der schöne Günther 13. Nov 2020 17:48

AW: ✔ Kann über WinApi kein Verzeichnis erstellen, über Explorer schon
 
Zitat:

Zitat von himitsu (Beitrag 1477293)
Nicht nur dass eine gleichnamige Datei existiert ... die ist/bleibt auch noch geöffnet.
TFile.Create ohne Freigabe des Streams?

Das war ja nur ein Test. Dass das keine komplette, ernst gemeinte Software war fand ich offensichtlich 😉

jaenicke 13. Nov 2020 20:50

AW: Kann über WinApi kein Verzeichnis erstellen, über Explorer schon
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1477290)
Ich muss irgend etwas Dummes übersehen haben, tatsächlich.

Leider werden Dateierweiterungen nach wie vor von Windows standardmäßig ausgeblendet, was meist der Grund für solche Irrtümer ist.


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