Ich habe inzwischen den Code wie empfohlen angepasst. Allerdings gefllt mir das Vorgehen nicht.
Hier ein Beispielprojekt:
http://www.familienbande-genealogie.de/Test/toe.zip
Vorbereitend eine beliebige Datei ins Rootverzeichnis des Systemlaufwerkes kopieren (dort hat man als Anwender keine Zugriffsrechte).
Beim Start der Demo wird eine Dateiauswahl geffnet, in der man die zuvor ins Root-Verzeichnis kopierte Datei auswhlt.
Hier der Code im Open-Event:
[i]Dim dlg as OpenDialog
Dim f as FolderItem
dim t as TextOutputStream
dim pos as integer
dlg=New OpenDialog
#If Not (TargetLinux) then
dlg.InitialDirectory=SpecialFolder.Documents
#Else //open Home directory on linux
dlg.InitialDirectory=SpecialFolder.Home
#endif
dlg.Title=“Select a file”
'dlg.Filter=FileTypes1.mif //Defined as file type in FileTypes1.
f=dlg.ShowModal()
If f <> Nil then
if f.Locked=false then
pos=1
t = TextOutputStream.Create(f)
pos=2
if t<>nil then
pos=3
t.Close
MsgBox “TextOutputStream is writable”
end
else
MsgBox “File locked”
end
Else
MsgBox “User Cancelled”
End if
Exception err
if pos=1 then
MsgBox “access denied (”+str(pos)+")"
else
MsgBox str(pos)
end[/i]
Im Code prfe ich vor Nutzung von TextOutputStream, ob das Foderitem existiert und ob es schreibgeschtzt ist. All das hilft nichts, ich bekomme beim Zugriff per TextOutputStream eine Exception. Klar kann ich die abfangen (wie im Code zu sehen), ich wrde aber lieber bereits vorher das Folderitem prfen, ob hier TextOutputStream berhaupt mglich ist.
Gibt es da tatschlich nichts?
Ich wrde mir dann eine Methode anlegen, der ich das Folderitem bergebe und dort den Textoutputstream versuchen. Dann knnte ich im Fehlerfall ein False zurckliefern.
Allerdings wird die Datei bereits bei TextOutputStream.Create(f) gelscht (Gre = 0 Bytes), wenn ich Zuriffsrechte habe. Ich wei nicht, ob das immer gewnscht ist.
So richtig gefallen mchte mir das alles nicht.
Hat noch jemand eine Idee?