Wenn Ihre Anwendung Daten und/oder Dateien benötigt, die nicht zusammen mit der Anwendung lokal auf der Festplatte installiert werden sollen, sondern separat auf einer CD zur Verfügung gestellt werden, müssen Sie vor jedem Zugriff auf diese Daten sicherstellen, dass die CD in ein CD-Laufwerk des betreffenden Rechners eingelegt ist. Zwar wäre die Möglichkeit, beim Setup von einer CD das Installationslaufwerk beispielsweise in der Windows-Registrierung festzuhalten. Doch zum einen lässt sich der einem CD-Laufwerk zugeordnete Laufwerksbuchstabe nachträglich vom Anwender leicht ändern. Außerdem ist es heutzutage auch nicht mehr ungewöhnlich, dass ein Rechner über mehrere CD-Laufwerke verfügt (etwa einfaches CD-Laufwerk nebst CD-Brenner), so dass sich die Daten-CD später auch in einem anderen Laufwerk befinden kann.
Am besten ist es daher, vor dem Zugriff auf eine auf einer CD erwartete Datei nicht nur zu prüfen, ob die CD eingelegt ist, sondern auch zugleich den Laufwerksbuchstaben des CD-Laufwerks zu ermitteln.
Ob ein Laufwerk ein CD-Laufwerk ist, finden Sie mit Hilfe der API-Funktion GetDriveType heraus (siehe auch "Der Typ ist gefragt"). Sie prüfen in einer Schleife alle möglichen Laufwerkbuchstaben (von C bis Z) - ist ein Laufwerk ein CD-Laufwerk, prüfen Sie, ob eine bestimmte Datei auf der CD vorhanden ist. Wird die Datei gefunden, haben Sie damit sowohl die Bestätigung als auch den Laufwerkbuchstaben. Ist in dem Laufwerk keine CD eingelegt, löst die Prüfung auf das Vorhandensein der Datei einen Laufzeitfehler aus. In diesem Fall werden einfach die nächsten, verbleibenden Laufwerkbuchstaben getestet. War die Suche erfolglos, können Sie den Anwender auffordern, die gewünschte CD in ein CD-Laufwerk einzulegen und die Suche erneut zu starten. Sie sollten jedoch dem Anwender die Chance geben, auf das Einlegen der CD zu verzichten (und damit die Suche abzubrechen) und anschließend in ihrem Code entsprechend fortfahren.
Die Hilfsfunktion TestForDataCD sucht nach einem CD-Laufwerk, in dem sich eine CD mit einer bestimmten Datei befindet. Im Erfolgsfalle gibt sie den Pfad zum Wurzelverzeichnis der CD zurück, anderenfalls einen leeren String.
Private Declare Function GetDriveType Lib "kernel32" _
Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Public Function TestForDataCD(TestFile As String) As String
Dim nDrive As String
Dim i As Integer
Dim nTest As String
Const DRIVE_CDROM = 5
On Error Resume Next
For i = 67 To 90
nDrive = Chr$(i) & ":\"
If GetDriveType(nDrive) = DRIVE_CDROM Then
nTest = Dir(nDrive & TestFile)
If Len(nTest) Then
TestForDataCD = nDrive
Exit Function
End If
End If
Next 'i
End Function
Die Funktion RequestDataCD prüft über die vorstehende Funktion TestForDataCD, ob eine bestimmte CD eingelegt ist. Wird die CD nicht gefunden, übernimmt sie die Aufforderung (deren Text Sie im Parameter Message übergeben) an den Anwender, die betreffende CD einzulegen. Die Aufforderung wird so lange wiederholt, bis entweder die CD gefunden wird, oder bis der Anwender in der MessageBox die Abbrechen-Schaltfläche betätigt. Auch diese Funktion gibt entweder den Pfad zum Wurzelverzeichnis der CD oder aber einen leeren String zurück.
Public Function RequestDataCD(TestFile As String, _
Message As String, Optional Title As String) As String
Dim nTitle As String
Dim nDrive As String
If Len(Title) = 0 Then
nTitle = App.Title
Else
nTitle = Title
End If
Do
nDrive = TestForDataCD(TestFile)
If Len(nDrive) Then
RequestDataCD = nDrive
Exit Function
Else
If MsgBox(Message, vbRetryCancel Or vbExclamation, nTitle) _
= vbCancel Then
Exit Function
End If
End If
Loop
End Function
|