ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 21.06.2001

Diese Seite wurde zuletzt aktualisiert am 21.06.2001
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Schreibschutz testen

Zurück...


Anzeige

Mathias Schiffer/-hg mailto:hg_drivecanwrite@aboutvb.de

Ein Schreibversuch auf einem schreibgeschützten Datenträger kann natürlich nicht erfolgreich sein. Die Frage ist nur, wie Sie feststellen können, ob ein Datenträger schreibgeschützt ist. Im Prinzip bieten sich dazu mehrere Möglichkeiten an.

So könnten Sie versuchen, eine temporäre Datei auf dem Datenträger anzulegen (und diese selbstverständlich anschließend gleich wieder zu löschen!). Schlägt der Versuch fehl, ist der Datenträger wohl schreibgeschützt. Allerdings setzt dies zumindest voraus, dass Sie zuvor geprüft haben, ob der Datenträger überhaupt verfügbar ist (Diskette eingelegt...). Doch auch dann kann die Ursache für das Fehlschlagen des Schreibversuchs darin liegen, dass der Datenträger (etwa eine Diskette) schlicht voll ist. Bei einer CD-ROM hingegen wird der Schreibversuch wegen der tatsächlichen physischen Unbeschreibbarkeit einer CD-ROM fehlschlagen (zumindest bei Schreibversuchen auf Dateisystembasis, so lange kein transparent arbeitender Treiber für wiederbeschreibbare CD-ROMs vorhanden ist). Bei Netzwerklaufwerken kann ein Fehlschlagen vielerlei Ursachen haben - angefangen von einer Trennung vom Netzwerk bis hin zu fehlenden Rechten. Der Fehlversuch lässt sich also nicht eindeutig auf einen Schreibschutz zurückführen.

Der CD-ROM-Aspekt lässt sich umgehen, indem Sie zunächst den Laufwerkstyp prüfen (siehe: Der Typ ist gefragt"Der Typ ist gefragt"). CD-ROM-Laufwerke melden sich mit einer eigenen Kennung und lassen sich so schon vorab eindeutig aussortieren. Ebenso können Sie so auch Netzwerklaufwerke aussortieren. Gewöhnliche Festplattenlaufwerke oder Ramdisks sind im Normalfall nicht schreibgeschützt - Ausnahmen hiervon müssten Sie wohl sowieso auf andere Weise entsprechend der Schutztechnik prüfen. Bei einer Diskette hingegen sind immerhin noch alle Fehler-Möglichkeiten gegeben - auch einschließlich fehlender Rechte.

Unabhängig vom Schreiben einer Datei und damit beispielsweise unabhängig vom Füllgrad einer Diskette können Sie jedoch versuchen, den Datenträgernamen (Volumelabel) auszulesen und wieder unverändert zurückzuschreiben. Dies schlägt bei schreibgeschützten Disketten tatsächlich fehl, berührt jedoch nicht alle anderen möglichen Ursachen. Das Volumelabel liefert Ihnen die VB-Funktion Dir$() zu einem gegebenen Pfad auf diesem Laufwerk (naheliegenderweise dem Wurzelpfad, etwa "A:\") mit der Konstanten vbVolume. Das versuchsweise Zurückschreiben des Volumelabels erledigt die API-Funktion MSDN-Library - API SetVolumeLabelSetVolumeLabel.

Die folgende Funktion DriveCanWrite sortiert die verschiedenen Möglichkeiten. Sie gibt einen der Werte der Enumeration DriveCanWriteConstants zurück. Nur bei einem Diskettenlaufwerk (bzw. einem vergleichbaren mobilen Datenträgertyp wie ZIP-Laufwerk usw.) erfolgt der Schreibversuch über das Volumelabel. Ein CD-ROM-Laufwerk wird automatisch als nicht beschreibbar gemeldet. Alle anderen Datenträger werden als nicht spezifizierbar gemeldet - hier müssen Sie gegebenenfalls andere Prüfungen nachordnen. Ist der Datenträger gar nicht verfügbar, wird auch dies angezeigt. Als Parameter können Sie der Funktion einen beliebigen Pfad auf dem zu prüfenden Datenträger angeben (allerdings keine UNC-Namen), oder einfach nur den Laufwerksbuchstaben selbst.

Private Declare Function GetDriveType Lib "kernel32" _
 Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Private Declare Function SetVolumeLabel Lib "kernel32" _
 Alias "SetVolumeLabelA" (ByVal lpRootPathName As String, _
 ByVal lpVolumeName As String) As Long

Public Enum DriveCanWriteConstants
  dcwNo
  dcwYes
  dcwUnspecified
  dcwNotAvailable
  dcwInvalidPath
End Enum

Public Function DriveCanWrite(ByVal RootPath As String) _
 As DriveCanWriteConstants

  Dim nPath As String
  Dim nDriveType As Long
  
  Const DRIVE_NOTAVAILABLE = 1
  Const DRIVE_CDROM = 5
  Const DRIVE_REMOVABLE = 2
    
  nPath = UCase$(Left$(RootPath, 1)) & ":\"
  If nPath Like "[A-Z]:\" Then
    nDriveType = GetDriveType(nPath)
    Select Case nDriveType
      Case DRIVE_NOTAVAILABLE
        DriveCanWrite = dcwNotAvailable
      Case DRIVE_REMOVABLE
        DriveCanWrite = Abs(CInt(CBool(SetVolumeLabel(nPath, _
         Dir$(nPath, vbVolume)) <> 0&)))
      Case DRIVE_CDROM
        DriveCanWrite = dcwNo
      Case Else
        DriveCanWrite = dcwUnspecified
    End Select
  Else
    DriveCanWrite = dcwInvalidPath
  End If
End Function

Beispiel-Projekt und Modul modDriveCanWrite (drivecanwrite.zip - ca. 3,3 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche




Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer