Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Länge Dateiname/Pfade (https://www.delphipraxis.net/202711-laenge-dateiname-pfade.html)

DieDolly 1. Dez 2019 21:32

AW: Länge Dateiname/Pfade
 
Zitat:

würde ich mir vorher die Erlaubnis vom Nutzer einholen.
Zitat:

Nein, wieso?
Weil man sowas nicht macht und ungefragt Systemeinstellungen ändert.

MicMic 1. Dez 2019 21:46

AW: Länge Dateiname/Pfade
 
Ich meine mit "Nein, wieso?" dass ich hier nicht in der Registry herum schreibe bzw. sie ändere :)

DieDolly 1. Dez 2019 21:49

AW: Länge Dateiname/Pfade
 
Typisches Missverständnis :thumb:
Um so besser

Luckie 2. Dez 2019 08:04

AW: Länge Dateiname/Pfade
 
Also ich halte es so. So bald ich mir die Frage stellen muss, ob etwas reicht. Also ob so lange Dateipfade möglich sind oder ob 32.000 Einträge in eine Listbox passen, dann sage ich mir, dass was mit meinem Konzept nicht stimmt. Denn was will der Benutzer mit 32.000 Einträgen in einer Listbox zum Beispiel? Deswegen sind solche Fragen für mich eher von theoretischer Bedeutung, spielen für mich in der Praxis eher eine untergeordnete Rolle.

himitsu 2. Dez 2019 17:14

AW: Länge Dateiname/Pfade
 
Zitat:

Zitat von MicMic (Beitrag 1452499)
In MAX_PATH steht bei mir 260. Warum liest man manchmal 255/256 (0-255=256), also im Grunde ein ShortString?

256 Zeichen für den Pfad im Dateisystemtreiber,
plus die abschließende #0 und plus der Datenträger (z.B. "X:\")
3 + 256 + 1 = 260

In Windows 10 soll es nun überall keine Grenze mehr geben. (stimmt leider nicht ganz)
Also theoretisch könnte man nun das MAX_PATH vergessen, denn Windows 7 stirbt in einem Monat aus, Windows 8 nutzt niemand freiwillig und somit hätte sich quasi das Problem von selbst erledigt.

Voraussetzung: Es muß im System aktiviert sein und in jeder Anwendung muß es auch extra nochmal freigegeben sein.
https://docs.microsoft.com/en-us/win.../naming-a-file
https://mspoweruser.com/ntfs-260-character-windows-10/ (ist nun auch die der Release drin)


Zitat:

Zitat von Dalai (Beitrag 1452518)
Es gibt einen Unterschied zwischen maximaler Pfadlänge ...

Vergiss nicht die Junctions und Translations, da kommt es drauf an, was letztendlich im Dateisystem ankommt, und nicht wie es im Explorer aussieht.
Und für einen lesenden Zugriff auf den Pfad, könnte man eventuell noch den Umweg über die kurzen 8.3-Namen gehen.
(schreibend = Datei/verzeichnis erstellen, die es vorher nicht gab)

DieDolly 2. Dez 2019 17:19

AW: Länge Dateiname/Pfade
 
Ich habe zwar eine eigene Manifestdatei als Resource und die wird auch eingebunden, aber unter Projektoptionen Manifest steht die Option auf Automatisch erzeugen.

Welche wird denn jetzt benutzt? Meine oder die von Delphi? Beide?

himitsu 2. Dez 2019 17:23

AW: Länge Dateiname/Pfade
 
Die, welche zuerst gelinkt wird. (was zuerst beim Compilieren im Code gefunden wurde)

Sollte sich bei Konflikten dann auch was im Buildlog finden lassen.
http://docwiki.embarcadero.com/RADSt...5s%27_(Delphi)
http://docwiki.embarcadero.com/RADSt..._%25d_(Delphi)
bzw.
http://docwiki.embarcadero.com/RADSt...arded_(Delphi)

DieDolly 2. Dez 2019 17:25

AW: Länge Dateiname/Pfade
 
Wo kommt das denn rein?

Hier
Code:
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application xmlns="urn:schemas-microsoft-com:asm.v3">
      <windowsSettings xmlns:ws2="https://schemas.microsoft.com/SMI/2016/WindowsSettings">
        <ws2:longPathAware>true</ws2:longPathAware>
      </windowsSettings>

      <!-- Windows 10 -->
      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>

      <!-- Windows 8.1 -->
      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>

      <!-- Windows 8 -->
      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>

      <!-- Windows 7 -->
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>

      <!-- Windows Vista -->
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
    </application>
  </compatibility>
Oder hier
Code:
<asmv3:application>
  <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
    <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
    <dpiAware>True</dpiAware>
  </asmv3:windowsSettings>
</asmv3:application>
Sollte man vielleicht einfach das Standard Delphi Manifest kopieren und erweitern? Ganz ehrlich, ich habe mittlerweile keine Ahnung mehr, ob Windows mein Manifest nutzt oder das von elphi.
Laut Resource Hacker sin beide drin.
Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
  <asmv3:application>
    <asmv3:windowsSettings>
      <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/pm</dpiAware>
      <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
    </asmv3:windowsSettings>
  </asmv3:application>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        publicKeyToken="6595b64144ccf1df"
        language="*"
        processorArchitecture="*"/>
    </dependentAssembly>
  </dependency>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="asInvoker"
          uiAccess="false"
        />
      </requestedPrivileges>
    </security>
  </trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
   <application>
      <!--The ID below indicates app support for Windows Vista -->
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
      <!--The ID below indicates app support for Windows 7 -->
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
      <!--The ID below indicates app support for Windows 8 -->
      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
      <!--The ID below indicates app support for Windows 8.1 -->
      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
      <!--The ID below indicates app support for Windows 10 -->
      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>         
   </application>
</compatibility>
</assembly>

Luckie 2. Dez 2019 18:11

AW: Länge Dateiname/Pfade
 
Bitte mach einen neuen Thread auf für ein neues Problem mit dem Manifest.

MicMic 2. Dez 2019 20:35

AW: Länge Dateiname/Pfade
 
Zitat:

Zitat von himitsu
Zitat:

Zitat von MicMic
In MAX_PATH steht bei mir 260. Warum liest man manchmal 255/256 (0-255=256), also im Grunde ein ShortString?

256 Zeichen für den Pfad im Dateisystemtreiber,
plus die abschließende #0 und plus der Datenträger (z.B. "X:\")
3 + 256 + 1 = 260

Ich hatte das ja getestet. Beitrag 4 und (6 als Abschluss) in diesem Thread.
Gehen nämlich nur 255. Aber irgendwo las ich mal, dass jemand mit irgendeinem Programm ein Dateiname erstellt hat, der weit mehr als 260 Zeichen hatte. Aber das habe ich nicht weiter verfolgt.

Zitat:

Zitat von Luckie
Also ich halte es so. So bald ich mir die Frage stellen muss, ob etwas reicht. Also ob so lange Dateipfade möglich sind oder ob 32.000 Einträge in eine Listbox passen, dann sage ich mir, dass was mit meinem Konzept nicht stimmt. Denn was will der Benutzer mit 32.000 Einträgen in einer Listbox zum Beispiel? Deswegen sind solche Fragen für mich eher von theoretischer Bedeutung, spielen für mich in der Praxis eher eine untergeordnete Rolle.

Das Konzept des Anwenders könnte man in Frage stellen. Mein Programm allerdings sollte funktionieren und nicht gleich einfrieren/abstürzen nur weil ich mich um manches nicht gekümmert habe. Deswegen interessiere ich mich auch für ein Verzeichnis mit hunderttausend Dateien... um es einfach mal durchzutesten, ein Funktionsabschnitt besser optimieren zu können usw. Natürlich bombardiere ich den Anwender nicht mit irgendwelchen Mega-Daten und lasse ihm 5 Minuten scrollen :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:45 Uhr.
Seite 2 von 2     12   

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