vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Dateisystem · Dateien allgemein   |   VB-Versionen: VB4, VB5, VB611.10.02
Schreibschutz setzen/entfernen

In Verbindung mit der VBEx32.DLL lässt sich schnell und einfach der Schreibschutz eines gesamten Ordners setzen oder entfernen.

Autor:   Dieter OtterBewertung:  Views:  28.523 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Den Schreibschutz einer einzelnen Datei zu entfernen geht so:

Dim nAttr As Long
nAttr = (GetAttr(sFilename) And Not vbReadOnly)
SetAttr sFilename, nAttr

Der Schreibschutz eines Ordners (ohne Dateien) lässt sich wie folgt entfernen:

SetAttr sFolder, vbNormal

Was aber, wenn man den Schreibschutz eines Ordners inkl. aller darin enthaltenen Dateien und Unterordner entfernen möchte?

Nun ja, man entfernt zunächst den Schreibschutz des Ordners und ermittelt dann alle Unterordner mitsamt aller darin enthaltener Dateien.

Das ganze lässt sich z.B. über eine rekursive Funktion realisieren. Ich persönlich verwende für solche Zwecke sehr gerne die VBFOLDER... und VBFILE...-Funktionen unserer  VBEx32.DLL.

Und das Ergebnis sieht dann so aus:

Dim sFolders() As String
Dim nCount As Long
Dim i As Long
 
' Start-Ordner
Dim sPath As String
sPath = "d:\temp"
 
' Start-Ordner...
Folder_SetReadOnly sPath, False
 
' jetzt alle Unterordner ermitteln
nCount = VBEX_FolderCount(sPath, 1)
If nCount >= 0 Then
  ReDim Preserve sFolders(nCount)
  nCount = VBEX_FolderList(sPath, 1, sFolders())
 
  ' Array durchlaufen und Schreibschutz entfernen
  For i = 0 To nCount
    Folder_SetReadOnly sPath & sFolders(i), False
  Next i
End If
Private Sub Folder_SetReadOnly(ByVal sPath As String, _
  Optional ByVal bReadOnly = False)
 
  ' Schreibschutz aller Dateien eines Ordners
  ' setzen / entfernen
 
  Dim sFiles() As String
  Dim nCount As Long
  Dim i As Long
  Dim nBytes As Currency
  Dim nAttr As Long
 
  ' zunächst Schreibschutz des Ordners setzen/entfernen
  SetAttr sPath, IIf(bReadOnly, vbReadOnly, vbNormal)
 
  ' jetzt alle Dateien ermitteln
  nCount = VBEX_FileCount(sPath, 0, "*.*", nBytes)
  If nCount >= 0 Then
    ReDim Preserve sFiles(nCount)
    nCount = VBEX_FileList(sPath, 0, "*.*", sFiles(), nBytes)
 
    ' Array durchlaufen und Schreibschutz setzen/entfernen
    If Right$(sPath, 1) <> "\" Then sPath = sPath & "\"
    For i = 0 To nCount
      nAttr = (GetAttr(sPath & sFiles(i)))
      If bReadOnly Then
        nAttr = (nAttr Or vbReadOnly)
      Else
        nAttr = (nAttr And Not vbReadOnly)
      End If
      SetAttr sPath & sFiles(i), nAttr
    Next i
  End If
End Sub



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle 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.