Filesystem-Handling

18/02/2016 - 09:00 von Lothar Geyer | Report spam
Bei unserer Anwendung kann der Benutzer Verzeichnisse für bestimmte
Dateien auswàhlen. Es wird geprüft, ob das Verzeichnis vorhanden und
"write enabled" ist. Ungefàhr so:

tmp = GetFileAttributes(Path)
If tmp <> INVALID_FILE_ATTRIBUTES Then
DirExists = CBool(tmp And vbDirectory)
End If

Attr = GetFileAttributes(Path)
If (Attr And vbDirectory) = vbDirectory Then
If (Attr And vbReadOnly) <> vbReadOnly Then
DirIsWritable = True
End If
End If

Falls das OK ist, wird versucht, das Verzeichnis "unsichtbar" zu machen:

SetAttr .GlobalDocStore, vbHidden + vbSystem

Bei dieser Anweisung kommt es aber zu Fehlermeldungen. An was kann das
liegen? Und wie kann ich das möglichst vorher abprüfen?

Lothar Geyer
 

Lesen sie die antworten

#1 Wolfgang Wolf
18/02/2016 - 11:37 | Warnen spam
Am 18.02.2016 um 09:00 schrieb Lothar Geyer:
Bei unserer Anwendung kann der Benutzer Verzeichnisse für bestimmte
Dateien auswàhlen. Es wird geprüft, ob das Verzeichnis vorhanden und
"write enabled" ist. Ungefàhr so:

tmp = GetFileAttributes(Path)
If tmp <> INVALID_FILE_ATTRIBUTES Then
DirExists = CBool(tmp And vbDirectory)
End If

Attr = GetFileAttributes(Path)
If (Attr And vbDirectory) = vbDirectory Then
If (Attr And vbReadOnly) <> vbReadOnly Then
DirIsWritable = True
End If
End If

Falls das OK ist, wird versucht, das Verzeichnis "unsichtbar" zu machen:

SetAttr .GlobalDocStore, vbHidden + vbSystem

Bei dieser Anweisung kommt es aber zu Fehlermeldungen. An was kann das
liegen? Und wie kann ich das möglichst vorher abprüfen?

Lothar Geyer



Welcher Fehler? Liegt es eventuell an den Rechten des Users?

In der VB-Hilfe steht:
"Das Festlegen von Attributen einer geöffneten Datei führt zu einem
Laufzeitfehler." Wenn man die Aktion in neueren Windows macht, will das
BS diese Einstellung an alle Unterordner und Dateien übertragen. VB kann
hier nicht differenzieren, zumindest gibt es dafür keinen Parameter.

Schon mal versucht ATTRIB.EXE aus VB heraus zu verwenden? Hier gibt es
explizit den Schalter /S (alle Unterverzeichnisse werden ab Windows 98
mit berücksichtigt).

Oder vielleicht mal die SetFileAttributes-API testen?

Const READONLY = &H1
Const HIDDEN = &H2
Const SYSTEM = &H4
Const ARCHIVE = &H20
Const NORMAL = &H80
Private Declare Function SetFileAttributes Lib "kernel32.dll" Alias
"SetFileAttributesA" (ByVal lpFileName As String, ByVal dwFileAttributes
As Long) As Long

rval = SetFileAttributes("c:\myFolder", attr)

Schönen Gruß
W. Wolf

Ähnliche fragen