| |
VB.NET - Ein- und UmsteigerDateien 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. | |
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. | |
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 | |
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 | |
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. | |
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. | |
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... | |
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 | |
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 | |
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 !! | |
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. | |
| 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 |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Neu! sevCoolbar 3.0
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere Infos
|