![]() |
NTFS-Komprimierung einer einzelnen Datei?
Hallo und schönes Wochenende!
Ich wollte mit
Delphi-Quellcode:
das Dateiattribut
TFile.SetAttributes
Delphi-Quellcode:
einer einzelnen Datei setzen, aber es funktionierte nicht.
faCompressed
Dann las ich: Zitat:
Code:
Aber es funktionierte nicht. Die Konsole meldete zurück:
compact "C:\meintest\meineapp.exe"
Code:
Was könnte die Ursache dafür sein? Wie kann man die NTFS-Komprimierung dieser Datei mit Delphi bzw. programmatisch durchführen?
1603048 : 1603048 = 1,0 zu 1 meineapp.exe
Von 1 Dateien in 1 Verzeichnissen sind 0 komprimiert und 1 nicht komprimiert. 1.603.048 Datenbytes insgesamt werden in 1.603.048 Bytes gespeichert. Das Komprimierungsverhältnis ist 1,0 zu 1. |
AW: NTFS-Komprimierung einer einzelnen Datei?
Aha. Ich habe den
Code:
switch vergessen. Damit funktioniert es.
/c
|
AW: NTFS-Komprimierung einer einzelnen Datei?
Wenn man den compact-Befehl für eine Datei ausführt, die bereits NTFS-komprimiert ist, so scheint nichts zu passieren.
Man braucht also offensichtlich nicht vorher zu prüfen, ob die Datei nicht NTFS-komprimiert ist? |
AW: NTFS-Komprimierung einer einzelnen Datei?
Zitat:
![]() Verschlüsselung, Kompression und andere "Attribute" sind da nur als Information (ReadOnly) enthalten. Genauso das FILE_ATTRIBUTE_NORMAL, welches nur dafür da ist, um "kein Atribut gesetzt" von "Fehler" unterscheiden zu können, da sonst beides 0 wäre. |
AW: NTFS-Komprimierung einer einzelnen Datei?
Zitat:
|
AW: NTFS-Komprimierung einer einzelnen Datei?
Was Compact intern macht, bzw. was man selber ausführen kann, wird dort auch genannt. :angle:
|
AW: NTFS-Komprimierung einer einzelnen Datei?
Seltsamerweise funktioniert dein Link für mich nicht:
Zitat:
|
AW: NTFS-Komprimierung einer einzelnen Datei?
Übrigens funktioniert das Setzen auch von "einfachen" Dateiattributen von Dateien in geschützten Verzeichnissen wie "C:\Program Files (x86)\..." natürlich nur mit Administrator-Privilegien.
|
AW: NTFS-Komprimierung einer einzelnen Datei?
Da ich garantiert vom TE falsch verstanden werde, Versuche ich es erst gar nicht zu Erklären sondern gebe nur ein Sample.
Delphi-Quellcode:
So könntest Du Dateien mit NTFS Komprimieren.
const
COMPRESSION_FORMAT_NONE = 0; COMPRESSION_FORMAT_DEFAULT = 1; COMPRESSION_FORMAT_LZNT1 = 2; procedure SetCompressionAttribute(const FileName: string; const CompressionFormat: USHORT); const FSCTL_SET_COMPRESSION = $9C040; var Handle: THandle; Flags: DWORD; BytesReturned: DWORD; begin if DirectoryExists(FileName) then Flags := FILE_FLAG_BACKUP_SEMANTICS else if FileExists(FileName) then Flags := 0 else raise Exception.CreateFmt('%s does not exist', [FileName]); Handle := CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, Flags, 0); if Handle=0 then RaiseLastOSError; if not DeviceIoControl(Handle, FSCTL_SET_COMPRESSION, @CompressionFormat, SizeOf(Comp), nil, 0, BytesReturned, nil) then begin CloseHandle(Handle); RaiseLastOSError; end; CloseHandle(Handle); end; |
AW: NTFS-Komprimierung einer einzelnen Datei?
Zitat:
Zitat:
Aber welchen Vorteil hat das, außer dass es viel komplizierter und fehleranfälliger ist? Das hier ist viel einfacher:
Delphi-Quellcode:
ShellExecEx('compact', '/c "' + AFile + '"', '', SW_HIDE);
Und das ist zum Verschlüsseln:
Delphi-Quellcode:
ShellExecEx('cipher', '/e /a "' + AFile+ '"', '', SW_HIDE);
|
AW: NTFS-Komprimierung einer einzelnen Datei?
Zitat:
Zitat:
Vorteile kann ich Dir keine nennen, da unser Jing und Jang nicht kompatibel ist, wären meine Vorteile = Deine Nachteile. Ich kann da auch anderen Code schreiben über WMI der genauso untergeht da ja ein externes Programm zu starten viel besser ist. Fehleranfälliger? Also ich geh wenigstens auf Fehler ein, Du startest nur was ohne es auszuwerten, das ist also besser? Rhetorische Frage bedarf keiner Antwort. Schön das Du es so regelst, das ist eine Super Idee so. Noch einen schönen Abend wünsche ich Dir. |
AW: NTFS-Komprimierung einer einzelnen Datei?
Sei mal ehrlich: Was ist dir denn über die Leber gekrochen?
So viele Vorwürfe: Du machst das und ich mach das. Wovon kommen diese vielen verbittert klingenden Vorwürfe? Kannst du mir das verraten? Würde mich EHRLICH interessieren! Oder ist das ein Staatsgeheimnis? Oder hat das was damit zu tun, dass dein Jing angeblich besser als mein Jang ist? Wieso verachtest du mein Jang? (Entschuldige, aber du hast damit angefangen). Aber ich wünsche noch einen schönen Freitagabend! |
AW: NTFS-Komprimierung einer einzelnen Datei?
Zitat:
Aber die Vorgehensweise vom Betriebssystem und wie dieses funktioniert, um zu Verstehen wie man was benutzen kann, für welche Dinge es Api gibt und für welche man tatsächlich externe Porgramme benötigt, diese Dinge kann ich nur schwer Erklären. Wenn jemand eine Möglichkeit geboten bekommt etwas innerhalb der "besten Programmierumgebung*" (*=persönliche Meinung) durchzuführen, derjenige aber lieber externe Programme einsetzt, da splittet sich der Weg, Jing und Jang ist kaputt. Vielleicht habe ich ja im nächsten Thread von Dir mehr Erfolg Dir zu helfen ohne das geschriebene diskutieren zu wollen. Sorry ich schwief ab, um es kurz zu machen: Ich bin glücklich, also meiner Leber geht es bestens, Danke der Nachfrage. |
AW: NTFS-Komprimierung einer einzelnen Datei?
Zitat:
Ordentliche Fehlerprüfung. Nja, wenn man es richtig machen würde, denn was steht bei ![]() Gut, das geht in gewissem Umfang auch mit dem Programmaufruf, aber da müsstest du auch den ExitCode und eventuell auch den StrOut/ErrOut des Programms auswerten. |
AW: NTFS-Komprimierung einer einzelnen Datei?
Zitat:
In diesem Fall habe ich diese Fehlermeldung erhalten: Zitat:
|
AW: NTFS-Komprimierung einer einzelnen Datei?
Zitat:
Vielleicht hast Du so etwas schonmal in freier Wildbahn gesehen, eine Applikation die so ein schönes Schild-Symbol auf irgend einem Knopf oder Menu, wenn man nun menu oder Knopf drückt verlangt man damit höhere Rechte ein, die vielleicht dafür nötig sind was auch immer Du vorhast zu erledigen auch erledigen zu dürfen. Falls da irgendwas abwertendes oder sonstwie verhöhnendes drinnen stehen sollte, sorry, so schreibe ich, also fühle Dich nicht angegriffen, ich meine das bestimmt nicht so. |
AW: NTFS-Komprimierung einer einzelnen Datei?
Ps: Was ich da geschrieben habe, falls Du damit nichts anfangen kannst, schau Dir mal TButton.ElevationRequired genauer an, dann verstehst Du mich hoffentlich besser.
|
AW: NTFS-Komprimierung einer einzelnen Datei?
Sehr schlau! Das muss auch mal gesagt werden!
Ich muss mich da hingegen mit meiner Windows-Unterstützung mit einem schnarch-langweiligen Einzeiler herumschlagen:
Delphi-Quellcode:
ShellExecEx('compact', '/c "' + AFile + '"', 'runas', SW_HIDE);
|
AW: NTFS-Komprimierung einer einzelnen Datei?
Zitat:
|
AW: NTFS-Komprimierung einer einzelnen Datei?
Zitat:
Ich sagte auch bereits das dein externer Programmaufruf für Dich das beste ist, für mich käme das halt nicht in Frage aber es geht ja um Dich. Solange Du glücklich damit bist, ist doch alles in Ordnung. Nichts desto trotz, viel Erfolg mit Deinem Programm! |
AW: NTFS-Komprimierung einer einzelnen Datei?
Zitat:
Delphi-Quellcode:
und
compact
Delphi-Quellcode:
sind ein Teil von Windows! Wir verwenden ja deshalb Windows-Aufrufe und das Windows API, weil unsere Programme ja sonst nicht in Windows laufen könnten!
cipher
Ich verstehe nicht, wieso manche das Rad neu erfinden und unbedingt Teile von Windows in Delphi nachprogrammieren möchten! Wieso tun die das? Es gibt doch bestimmt lohnendere Aufgaben als Windows nachzuprogrammieren, oder? |
AW: NTFS-Komprimierung einer einzelnen Datei?
Zitat:
Wenn es bei Dir dort keine "compact.exe" und "cipher.exe" gibt, kann Dein Rechner was was meiner nicht kann oder diese EXTERNEN Programme liegen irgendwo anders bei Dir. Windows-Api habe ich gezeigt. Externen Programmaufruf hast Du gezeigt. Nur der Richtigkeithalber. Les doch mal was ein ShellExecuteEx() macht da Du mir nicht glaubst. |
AW: NTFS-Komprimierung einer einzelnen Datei?
|
AW: NTFS-Komprimierung einer einzelnen Datei?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
AW: NTFS-Komprimierung einer einzelnen Datei?
Die compact.exe (also dieses Programm) wird intern die gleichen API-Aufrufe machen.
Von daher ist es vom Ergebnis das Gleiche, ob ich die API-Aufrufe direkt mache oder eine beliebige externe Anwendung (wie hier die compact.exe) die diese API-Aufrufe macht. Bei einer vorgefertigten Anwendung muss ich mit dem leben wie es dort umgesetzt ist, macht man die API-Aufrufe direkt, dann kann man das nach Gutdünken selber zusammenstecken. Trotz allem bleibt es beim ShellExecute/Ex, dass hier eine externe Anwendung aufgerufen wird. Ob diese nun zum Lieferumfang des Betriebssystems gehört oder nicht ist dabei völlig unerheblich. Das ist weder gut noch schlecht, sondern einfach nur so. Ein API-Aufruf geht technisch gesehen an eine DLL und die ist auch extern (allerdings etwas anders extern als die Anwendung) und wenn diese DLL fehlt, dann geht auch der API-Aufruf in die Hose. Die externe Anwendung allerdings auch, denn die ruft ja auch die API (DLL) auf, die dann fehlt. In diesem Sinne ein schönes Wochenende |
AW: NTFS-Komprimierung einer einzelnen Datei?
Zitat:
Es tut mir leid das Du nicht die Bedeutung von Windows-Api kennst und Du Dir nicht im Klaren bist was für einen non-sens hier geschrieben wird. Um Dich ein wenig Aufzuklären, WinApi bedeutet man führt Befehle aus die das System per Library bereitstellt. Also wenn man in Rubrik Win32/Win64 API (native code) eine Frage stellt, sollte man sich schon vorher schlau gemacht haben was dies überhaupt bedeutet. Oder wäre wenn ich in meiner Versionskontrolle einer .exe Datei "blabla Microsoft blabla" schreibe dies dann automatisch eine Api für Dich? Application Programming Interface kurz API bedeutet nicht ein externes Programm zu starten sondern das man sich der Libraries bedient, was compact.exe bzw. cipher.exe intern bestimmt ähnlich handhabt. Wie dem auch sei, Du hast bestimmt Recht, alles wo Microsoft drauf steht ist ne Api und ich liege falsch. Also ich gebe nach, dein externer Programm aufruf ruft gar kein Programm auf sondern ist pure Api Magie, siehe Dein Link Text "command-line version", Microsoft wollte bestimmt "Api Version" schreiben, naja die Wissen auch nicht wie es eigentlich lautet, schreib denen das mal. Das Thema hat sich für mich mehr als erledigt. Schönes Wochenende PeterPanino! |
AW: NTFS-Komprimierung einer einzelnen Datei?
Zitat:
Habe ich eigentlich schon ein paar Beiträge vorher erwartet. Manche Leute wollen nicht geholfen werden in dem Fall sollte man sich zurück ziehen bevor die ganze Sache ausartet. Zitat:
Wenn mir die Befehle\Funktionen bekannt sind dann löse ich das Problem innerhalb meiner Anwendung und verwende keine externen Anwendungen um zum ziel zu kommen. Dafür reicht im Normalfall eine Batchdatei man benötigt dafür kein Delphi. gruss |
AW: NTFS-Komprimierung einer einzelnen Datei?
![]() Vielleicht schenkst Du denen ja etwas mehr Glaubwürdigkeit. |
AW: NTFS-Komprimierung einer einzelnen Datei?
Zitat:
Was denn nu! Zitat:
|
AW: NTFS-Komprimierung einer einzelnen Datei?
Zitat:
|
AW: NTFS-Komprimierung einer einzelnen Datei?
Gut gemeint ;)
Nur diese Infos gehen ins leere weil er ein Command Line Tool für seine Lösung verwendet und es nicht programmtechnisch lösen will. Ok bin wech.. ;) gruss |
AW: NTFS-Komprimierung einer einzelnen Datei?
Zitat:
z.B. falls Windows mal den Programmnamen ändert oder die Parameter zum Steuern oder es durch irgendwas nicht mehr in den Suchpfaden liegt oder es wegen Problemen nichts macht. |
AW: NTFS-Komprimierung einer einzelnen Datei?
Zitat:
Die wesentliche Frage ist doch in Wirklichkeit, ob man zum Schreiben eine graue Tastatur verwendet oder eine mit Blümchen drauf! Mamma mia! |
AW: NTFS-Komprimierung einer einzelnen Datei?
Zitat:
|
AW: NTFS-Komprimierung einer einzelnen Datei?
Es bedeutet dass man eine offiziell dokumentierte Systemfunktion verwendet.
Bei diesem Programm ist das nicht so der Fall. Und dass man die Fehlerbehandlung auch ordentlich und ohne umwege implementieren kann, denn dafür steht alles in der Dokumentation. In einer guten API gibt es an bestehenden Funktionen keine Änderungen, nur Erweiterungen des Funktionsumfangs oder neue Funktionen. Und die WinAPI hällt sich bei den dokumentierten Funktionen oft daran. Wenn nicht, dann gibt es meistens auch eine entsprechende Vorankündigung, dass es "bald" geändert/abgeschafft wird. Der ExitCode des Programms sagt ob es seine arbeit erfolgreich gemacht hat (aber nicht alle Programme setzen auch den ExitCode ... z.B. ich kenne fast keinen DelphiEntwickler, der das bei seinen Konsolenprogrammen und noch weniger, die es bei ihren VCL/FMX-Programmen machen) und mindestens das hat man gefälligst auszuwerten. [edit] jupp niemand, nur fast 5 Seiten und nichts davon gesehn und auch nicht gelesen, dass es jemand vor hat. |
AW: NTFS-Komprimierung einer einzelnen Datei?
Zitat:
Delphi-Quellcode:
ist eine (Betriebs-)Systemfunktion.
compact
|
AW: NTFS-Komprimierung einer einzelnen Datei?
Manche Leute diskutieren auch darüber, ob man Spaghetti in Salzwasser kochen soll oder in normalem Wasser, in das man dann eine Prise Salz gibt ...
|
AW: NTFS-Komprimierung einer einzelnen Datei?
Zitat:
compact ist ein Programm, dass eine Betriebssystemfunktion aufruft. Welche, beschrieb Kodezwerg in seinem Delphiquelltextbeispiel. Die Betriebs-)Systemfunktion bleibt auch erhalten, wenn man das Programm compact löscht. |
AW: NTFS-Komprimierung einer einzelnen Datei?
Zitat:
Du bist doch gar nicht an einer Lösung interessiert sondern versuchst nur die Leute niederzumachen die DIR berechtigte Kriterien aufzeigen welche du einfach nur missachtest. just my 2 Cent.. PS: Man kann auch in einem Beitrag mehrere Beiträge zitieren falls dir das noch nicht aufgefallen ist du musst also nicht jeden einzeln beantworten. Zitat:
Sorry war doch schon wech! :) gruss |
AW: NTFS-Komprimierung einer einzelnen Datei?
himitsu, gebe Dich geschlagen.
Es gibt halt unterschiedliche Auffassungen was ein Programm und was eine Library ist. Für den TE ist alles was existiert eine Api da ja alles(?) irgendwie eine Funktion ausübt. Da frag ich mich wozu der TE überhaupt Delphi benutzt, man kann vieles auch mit Batch Dateien erledigen. Oder PowerShell Skripte, da würde sich der TE mehr als Wohl fühlen, alles non-Api... erm Api Funktionen über dritt-Programme. Emil, nimm mich mit! Bin auch wech |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 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