vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Dateien via Windows Dateisystem komprimieren 
Autor: Tommi467
Datum: 24.04.19 10:49

Hallo zusammen,

ich habe die Herausforderung Dateien auf dem Server visuell zu kennzeichnen.

Eigentlich wäre ein Schreibschutz angebrachter, dieser lässt dann aber auch ein Drucken
der Dateien nicht mehr zu (Eigenart von AutoCAD bei AutoCAD-Zeichnungen).

Also muss ich eine Möglichkeit finden, die Dateien zumindest visuell zu Kennzeichnen,
das diese NICHT BEARBEITET werden dürfen. Auch eine Umbenennung kommt aus ablauftechnischen
Gründen leider nicht in Frage.

Ein Möglichkeit wäre nun, die Dateien über das Dateisystem zu komprimieren, da sie
dann anschließend blau gekennzeichnet wären.

Ich habe hier im vbarchiv auch einen ToolTip https://www.vbarchiv.net/tipps/tipp_2428-ordner-inhalte-im-dateisystem-komprimieren-wmi.html gefunden, der diese Funktion via WMI demonstriert.
Allerdings ist die Function nur für ganze Ordner ausgelegt und ich tue mich schwer dies für einzelne Dateien umzusetzen.

Deshalb an dieser Stelle die Frage/Bitte um Hilfe.
Ich benötige einen Aufruf, der nur einzelne Dateien komprimiert.

Über entsprechende Hilfe würde ich mich sehr freuen.

Beitrag wurde zuletzt am 24.04.19 um 10:50:08 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateien via Windows Dateisystem komprimieren 
Autor: Manfred X
Datum: 24.04.19 12:37

Hallo!

Eigentlich ist in Windows dafür das Management von Zugriffsrechten für Benutzergruppen zuständig.
Für jede Datei kann das Sicherheitsprinzipal detailliert festgelegt werden.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateien via Windows Dateisystem komprimieren 
Autor: Tommi467
Datum: 24.04.19 13:07

Vielen Dank Manfred,

das es grundsätzlich gehen muss ist mir klar,
ich habe nur Probleme den genannten Source dementsprechend umzusetzen
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateien via Windows Dateisystem komprimieren 
Autor: Manfred X
Datum: 24.04.19 14:16

Die Komprimierung oder Kennzeichnung einer Datei ist für die von Dir genannte Anforderung völlig ungeeignet. Du mußt auf die Benutzerkonten-Steuerung zurückgreifen und festlegen, welche Nutzergruppe bei welchen Dateien welche Rechte besitzt.
In Visual Studio Abfrage durch: Namespace System.Security.Principal
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateien via Windows Dateisystem komprimieren 
Autor: Tommi467
Datum: 24.04.19 14:25

Nein Manfred, das stimmt so nicht ganz.

Ich kann das NICHT über die Benutzerrechte steuern.

Es geht darum, das einige Dateien NICHT bearbeitet werden SOLLEN.
Sie müssen aber ausgedruckt werden können.

Das Problem ist an dieser Stelle AutoCAD. Sollte auf der Datei ein
Schreibschutz und/oder Benutzerrechte liegen, kann AutoCAD diese Datei
auch nicht mehr ausdrucken (manuell schon, aber nicht in Serie, weil
die Scripte wegen der auftauchende Schreibschutzmeldung abbrechen)

Aus diesem Grund wollen wir die Dateien NICHT mehr schützen sondern
einfach nur visuell kennzeichnen. Und das geht durch die Windows System Komprimierung.
Die so komprimierten Ordner und/oder Dateien werden dann BLAU dargestellt, sind noch
bearbeitbar und somit auch ausdruckbar.

Mein Problem ist nun, das ich mit diesem Source keine Ordner sondern nur einzelne Dateien komprimieren möchte. Und bei dieser der Umsetzung habe ich Probleme.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateien via Windows Dateisystem komprimieren 
Autor: Manfred X
Datum: 24.04.19 15:26

Der richtige Weg wäre es, entsprechende Nutzer einzurichten.
Wer drucken will muß sich in einer geeigneten "Rolle" identifizieren.
Oder man verwaltet die Zugriffsrechte auf diese Dateien über eine
Datenbank (FILESTREAM).
So wie Du das planst, benötigst Du ein zuverlässiges, sicheres und sehr
ausgereiftes BackUp-System mit einem Management für Datei-Versionskennungen,
weil die "kritischen" Dateien nicht gegen (z.B. unbeabsichtigte)
Änderungen geschützt sind.
Die farbige Komprimierungs-Markierung ist zudem vom verwendeten File-Explorer
und dessen Einstellungen abhängig und die Kompression einzelner Dateien kann
z.B. bei der Weitergabe des Projekts Probleme bereiten.

Ob man im NTFS-Dateisystem per WMI einzelne Dateien komprimiert verwalten kann,
ist mir leider nicht bekannt.

https://docs.microsoft.com/en-us/windows/desktop/wmisdk/wmi-tasks--files-and-folders

Beitrag wurde zuletzt am 24.04.19 um 15:40:46 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateien via Windows Dateisystem komprimieren 
Autor: Tommi467
Datum: 24.04.19 15:40

Das ist für mich keine Lösung.

Es geht nicht um Berechtigungen!!! Es geht darum anzuzeigen, das diese Dateien
nicht bearbeitet werden dürfen weil sie ausgeliehen sind. Da nutzen mir auch die
besten Berechtigungen nichts. Denn wenn eine Datei ausgeliehen ist darf sie nicht
bearbeitet werden, muss aber jederzeit ausdruckbar bleiben.

Das kann ich nicht mit Berechtigungen realisieren, es funktioniert einfach nicht.

2. Das etwaiges Programm wird nicht weitergegeben, es ist nur für administrative
Zwecke zweier Berechtigter.

Ich hab ein ausgeklügeltes BackUp-System, aber darum geht es doch überhaupt nicht.
Ich will doch was ganz anderes. Ich will einfach nur, das die beiden Personen die
mit diesen Dateien arbeiten auf einem Blick im Explorer sehen, diese Datei ist ausgeliehen.
Die Rechner sind in unserem Haus alle standardisiert, also identsich eingerichtet.
Es gibt nur den Windows Explorer, nichts anderes.

Ich will doch einfach nur die erwähnte Funktion, egal wieso weshalb und weswegen...
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

GELÖST: Dateien via Windows Dateisystem komprimieren 
Autor: Tommi467
Datum: 24.04.19 15:49

Zitat:

Ob man im NTFS-Dateisystem per WMI einzelne Dateien komprimiert verwalten kann,
ist mir leider nicht bekannt.


doch... es geht...
und zwar ganz simple... wenn man's weiß:

Hier für alle dies vielleicht auch mal gebrauchen können:
Imports System.IO
 
Public Class Form1
 
    Private Const COMPRESSION_FORMAT_NONE As Short = 0
    Private Const COMPRESSION_FORMAT_LZNT1 As Short = 2
    Private Const FSCTL_SET_COMPRESSION As Integer = 639040
 
    Private Declare Function DeviceIoControl Lib "kernel32" _
              (ByVal hDevice As IntPtr, _
               ByVal dwIoControlCode As Integer, _
               ByRef lpInBuffer As Short, _
               ByVal nInBufferSize As Short, _
               ByVal lpOutBuffer As Integer, _
               ByVal nOutBufferSize As Integer, _
               ByRef lpBytesReturned As Integer, _
               ByVal lpOverlapped As IntPtr) As Boolean
 
    Private Sub CompressFile(ByVal file As String)
        Dim Size As Short = 2
        Dim ReturnedBytes As Integer
        Dim Result As Boolean
        Dim Stream As FileStream
 
        Try
            Stream = New FileStream(file, FileMode.Open, FileAccess.ReadWrite, _
              FileShare.None)
 
            Result = DeviceIoControl(Stream.Handle, _
                                                  FSCTL_SET_COMPRESSION, _
                                                  COMPRESSION_FORMAT_LZNT1, _
                                                  Size, _
                                                  0, _
                                                  0, _
                                                  ReturnedBytes, _
                                                  IntPtr.Zero)
            Stream.Close()
 
        Catch
            If Not Stream Is Nothing Then
                Stream.Close()
            End If
        End Try
 
    End Sub
 
 
    Private Sub DeCompressFile(ByVal file As String)
        Dim Size As Short = 2
        Dim ReturnedBytes As Integer
        Dim Result As Boolean
        Dim Stream As FileStream
 
        Try
            Stream = New FileStream(file, FileMode.Open, FileAccess.ReadWrite, _
              FileShare.None)
 
            Result = DeviceIoControl(Stream.Handle, _
                                                  FSCTL_SET_COMPRESSION, _
                                                  COMPRESSION_FORMAT_NONE, _
                                                  Size, _
                                                  0, _
                                                  0, _
                                                  ReturnedBytes, _
                                                  IntPtr.Zero)
            Stream.Close()
 
        Catch
            If Not Stream Is Nothing Then
                Stream.Close()
            End If
        End Try
 
    End Sub
die Aufrufe zum codieren und decodieren erfolgen dann über:
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) _
      Handles Button1.Click
        CompressFile("c:\temp\test.txt")
 
        ' bzw.
 
        DeCompressFile("c:\temp\test.txt")
 
    End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: GELÖST: Dateien via Windows Dateisystem komprimieren 
Autor: Manfred X
Datum: 24.04.19 16:01

oder so (Datei im Beispiel heißt G:\Daten\lf2.txt)
Dim strComputer As String = "."
Dim objWMIService As Object = GetObject("winmgmts:" & "!\\" & strComputer & _
  "\root\cimv2")
Dim colFiles As Object = objWMIService.ExecQuery _
     ("Select * from CIM_DataFile where Name = " & "'G:\\Daten\\lf2.txt'")
 
For Each objFile As Object In colFiles
    objFile.compress
Next objfile
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateien via Windows Dateisystem komprimieren 
Autor: effeff
Datum: 24.04.19 16:58

Eigentlich sollte es reichen, die Datei mit einem Schreibschutz zu versehen.

Rechte Maustaste auf die Datei, im Reiter "Allgemein" einfach "Schreibgeschützt" anhaken...

Genauso kann der Schreibschutz dann auch wieder entfernt werden.

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Dateien via Windows Dateisystem komprimieren 
Autor: Tommi467
Datum: 25.04.19 07:09

Erst einmal vielen Dank für deine Hilfe,
aber ich glaube ich habe jetzt ausreichend erklärt, warum es mit einem Schreibschutz NICHT funktioniert.

Zudem, wie ich einen Schreibschutz setze ist nach 30 Jahren EDV auch bis zu mir durchgedrungen

Das ganze muss via source passieren !!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: GELÖST: Dateien via Windows Dateisystem komprimieren 
Autor: Tommi467
Datum: 25.04.19 07:13

Hallo Manfred,

vielen Dank das du nun doch noch einen Source geschickt hast.

Aber ich vermute mal, bei einem Durchlauf von 200 bis 300 Dateien
quer über den ganzen Server wird mein Weg etwas schneller sein.

Ich werde es mal ausprobieren.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel