AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi SHFileOperation: wie lange darf pFrom sein?
Thema durchsuchen
Ansicht
Themen-Optionen

SHFileOperation: wie lange darf pFrom sein?

Ein Thema von Guido Eisenbeis · begonnen am 28. Apr 2010 · letzter Beitrag vom 1. Mai 2010
Antwort Antwort
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#1

SHFileOperation: wie lange darf pFrom sein?

  Alt 28. Apr 2010, 23:36
In meinem Programm gibt es eine Lösch-Routine, in der man auswählen kann, ob in den Papierkorb verschoben (SHFileOperation), oder endgültig gelöscht wird (DeleteFile).

Es geht um größere Datenmengen, besser gesagt, um größere Mengen von Datei-Pfaden: als Anhaltspunkt seien mal 30.000 genannt. (Das ist heute nicht mehr viel, allein wenn man mal eine einzige gespeicherte WebSite betrachtet: Mit den zugehörigen Dateien im "-Dateien"-Ordner können das locker über 100 sein.) Die Dateipfade werden in einem Array gespeichert und einzeln an die Löschroutine übergeben. Wählt der User das endgültige Löschen mit DeleteFile, so ist das ratz-fatz erledigt. Beim Verschieben in den Papierkorb mit SHFileOperation dauert das jedoch ewig-und-drei-Tage!

Man kann in pFrom der SHFileOperation mehrere Pfade gleichzeitig übergeben, wenn diese mit einem NULL-Zeichen getrennt werden. Jetzt kann aber ein einzelner Pfad durchaus über 250 Zeichen lang sein. Meine Frage ist: Welche Begrenzung gibt es für pFrom? Anders ausgedrückt: Wie lange dürfen die Pfade insgesamt sein, die man pFrom übergeben kann?

Guido.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: SHFileOperation: wie lange darf pFrom sein?

  Alt 28. Apr 2010, 23:51
Ich konnte in der Dokumentation jetzt auch keinen Hinweis finden. Das heißt, du wirst es wohl ausprobieren müssen. Aber wie sagt Raymond Chen immer so schön: "If you have to ask something is wrong."
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: SHFileOperation: wie lange darf pFrom sein?

  Alt 29. Apr 2010, 00:26
Hallo Michael,

ging mir genauso. Hab verschiedene Dokumentationen durchgelesen, aber nichts konkretes gefunden. Dort steht immer so in etwa: "pFrom ... is used as a buffer to hold multiple file names."

Vielleicht weiß ja sonst noch wer was genaueres? Oder hat schon erfolgreich probiert, wie es mit größeren Mengen von Datei-Pfaden funktioniert? Oder wie dieser Puffer gespeichert wird? Evtl. ist der Puffer ja unbegrenzt (außer vom RAM usw.) und kann tatsächlich reichlich Datei-Pfade aufnehmen?

Guido.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.154 Beiträge
 
Delphi 12 Athens
 
#4

Re: SHFileOperation: wie lange darf pFrom sein?

  Alt 29. Apr 2010, 07:11
Also, pFrom und pTo können ja ein Array darstellen.

Pro Zeile/Eintrag könnte es eventuell die bekannte MAX_PATH-Grenze geben.

Ansonsten wüßte ich nicht, warum es dort eine Grenze geben sollte, aber andersweitig bekannte Grenzen wären 512, 4K, 8K, 64K und dann noch ein paar Grenzen, welche auf Typen-Wertebereiche zurückzuführen sind. 32K für SmallInt und die 2G, bzw. 4G für die Integer-/Speichergrenzen.

Alles unter 32K kann ich ausschließen, da eines meiner Programme diese Grenzen hierbei ständig überschreitet.

Falls MAX_PATH nicht zutrifft, dann wären nach UNC pro Zeile alleine schonmal bis zu 32K möglich.
(Uniform Naming Convention / Universal Naming Convention)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: SHFileOperation: wie lange darf pFrom sein?

  Alt 29. Apr 2010, 08:03
Zitat von himitsu:
Pro Zeile/Eintrag könnte es eventuell die bekannte MAX_PATH-Grenze geben.
Die MAX_PATH-Grenze dürfte nur gelten wenn es sich bei der API um ein Ansi-Version der Win32-API handelt. Bei der Unicode-Version der WinAPI habe ich schon öfters in der MSDN gelesen das es keine Längenbegrenzungen mehr gibt (außer die beteiligten (Datei)system haben solche).
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: SHFileOperation: wie lange darf pFrom sein?

  Alt 30. Apr 2010, 18:11
Zitat von himitsu:
Also, pFrom und pTo können ja ein Array darstellen.
Kann mir im Moment nichts darunter vorstellen. Wie funktioniert das genau?

Zitat von himitsu:
Pro Zeile/Eintrag könnte es eventuell die bekannte MAX_PATH-Grenze geben.
Damit kann ich leben. Kein Problem in meinem Programm.

Zitat von himitsu:
Ansonsten wüßte ich nicht, warum es dort eine Grenze geben sollte
Das wäre mein Ansinnen.

Zitat von himitsu:
... aber andersweitig bekannte Grenzen wären 512, 4K, 8K, 64K und ... Typen-Wertebereiche ... 32K für SmallInt ... Integer-/Speichergrenzen.
Ist klar. Trotzdem gut, dass du's erwähnst.

Zitat von himitsu:
Alles unter 32K kann ich ausschließen, da eines meiner Programme diese Grenzen hierbei ständig überschreitet.
Auch gut zu wissen, ist aber viel zu wenig. Um es mal grob zu überschlagen: 1 Byte/Zeichen und als Bspl. eine Pfadlänge von 250 Zeichen ergibt bei 32KB lediglich 128 Pfade. Das ist weit entfernt von 30.000 Pfaden.

Ansonsten, um Missverständnissen vorzubeugen, technisch wäre ich in der Lage, das per "Trial And Error" auszuprobieren. Ich gehe bei diesem Thread allerdings davon aus, dass ein Test dieser Art keine Aussagekraft hat. Was in diesem Fall bei meinem Test, meine BS und meiner Hardware funktioniert, muss nicht zwangsläufig auf anderen PCs funktionieren. Deshalb würde ich mich über weitere Infos freuen.

Guido.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.154 Beiträge
 
Delphi 12 Athens
 
#7

Re: SHFileOperation: wie lange darf pFrom sein?

  Alt 30. Apr 2010, 19:17
Zitat von Guido Eisenbeis:
Kann mir im Moment nichts darunter vorstellen. Wie funktioniert das genau?
Man kann hier doch mehrere Pfade übergeben und im Grunde stellt diese Struktur ein Array dar.
'Pfad'#0'Pfad'#0'Pfad'#0'Pfad'#0'Pfad'#0'Pfad'#0'P fad'#0#0

Und was die 30000 angeht, da wirdst du es wohl einfach mal probieren müssen, ob diese Funktion mit dieser durchschnittlich 4 MB kleinen Liste klar kommt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: SHFileOperation: wie lange darf pFrom sein?

  Alt 1. Mai 2010, 07:35
Bis hierhin schon mal herzlichen Dank für alle Antworten.

Ich würde mich freuen, wenn noch jemand was informatives beizutragen hat.

Schönen 1. Mai,
Guido.
  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 13:23 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