Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Christian Weiß am 18.04.12 - 17:50:35

Titel: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: Christian Weiß am 18.04.12 - 17:50:35
Hallo,

über dieses Forum bin ich auf das FSO aufmerksam geworden.

In einem Thread habe ich dann folgenden Code gesehen:
Code
Set fso = createObject("Scripting.FileSystemObject")
fso.DeleteFolder "c:\Ordnername", False

Ich habe dies ausprobiert und es funktioniert auch.
Jetzt möchte ich allerdings gerne den Namen des Ordners als Konstante übergeben um das löschen eines Verzeichnisses so zum Beispiel in eine Lotusscript-Funktion auszulagern.
Wenn ich dann so etwas notiere:
fso.DeleteFolder DirectoryName, False

kriege ich eine Fehlermeldung: OLE: Automation object error
Könnt ihr mir einen Tipp geben, wie ich die Zeile richtig schrieben muss?

Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: pram am 18.04.12 - 22:14:20
Ins blaue geraten

1.
const DirectoryName$="c:\Ordnername"
fso.DeleteFolder DirectoryName, False

2.
dim myDirName as String
myDirName = DirectoryName
fso.DeleteFolder myDirName, False

3.
fso.DeleteFolder cstr(DirectoryName), False

Gruß
Roland
Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: Christian Weiß am 19.04.12 - 10:06:19
Vielen Dank für die Antwort.
Mit fso.DeleteFolder cstr(DirectoryName), False hat es funktioniert.
Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: buzi am 14.06.13 - 11:36:20

Hallo, ich hab grad das selbe Problem. Kann es aber mit CStr nicht lösen  :-:
Liegt es daran, dass der Ordner direkt auf C:\ liegt und ich da generell nicht löschen kann mit dieser Funktion?

Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: ascabg am 14.06.13 - 11:41:19
Hallo,

Und was fuer einen Fehler bekommst Du?

Prinzipiell kannst Du mit dieser Funktion auch Dateien/Ordner direkt auf C:
loeschen.


Andreas
Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: buzi am 14.06.13 - 11:46:02
OLE: Automation object error
Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: buzi am 14.06.13 - 11:46:41
Hier mein code:

   Dim fso As Variant 'FileSystemObject
   Set fso = createObject("Scripting.FileSystemObject")
   
   If fso.FolderExists(dirName) Then
      fso.DeleteFolder dirName, True
   End If
Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: ascabg am 14.06.13 - 11:51:21
Und dirName ist eine String-Variable?


Andreas
Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: buzi am 14.06.13 - 11:54:36

Ja. Sorry hier die ganze Funktion:

Function deleteTmpPath(dirName As String)
   
   Dim fso As Variant 'FileSystemObject
   Set fso = createObject("Scripting.FileSystemObject")
   
   If fso.FolderExists(dirName) Then
      fso.DeleteFolder dirName, True
   End If
   
End Function
Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: ascabg am 14.06.13 - 12:11:13
Nicht das wir hier ein Rechte-Problem haben.
(ist erst einmal nur eine Vermutung)


Andreas
Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: buzi am 17.06.13 - 08:55:44
Ja so kommt es mir eben auch vor. Denn es klappt nicht, egal welche Funktion ich benutze (auch die Dir-Fkt von Lotus Notes mag nicht...

Aber wo liegt das Problem? Rechte in Windows? Oder Rechte in Notes? Bin ja überall Admin...?!?!
Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: it898ur am 18.06.13 - 07:59:22
Hallo,

kann es sein, dass eine Datei aus dem Ordner noch von Notes oder einem anderen Programm im Zugriff ist - dann kann der Ordner auch nicht gelöscht werden (egal mit welchen Rechten).

Gruß

André
Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: buzi am 18.06.13 - 09:02:01
Hallo Andre,

ja das ist gut möglich! Ich habe den temp-Ordner nämlich erstellt, um Dateien abzulegen, deren Inhalt in eine andere Datei kopiert wurden. Nach dem Vorgang möchte ich die temp-Dateien natürlich wieder löschen. Vielleicht ist da noch ein Handle drauf?

Set destDoc = StarDesktop.loadComponentFromURL("private:factory/swriter","_blank",0,args)
Set destText = destDoc.getText()
Set destCursor = destText.createTextCursor()
bausteinFile = convertToURL(tmpPath, tmpFile)
Call destCursor.insertDocumentFromUrl(bausteinFile, args)

Wobei bausteinFile im temp-Ordner liegt. Sie wird nicht explizit geladen, nur ins andere File geladen. Muss ich trotzdem irgendwas "aufräumen" bevor ich den Ordner lösche?

Mel
Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: Tode am 18.06.13 - 10:24:15
Mal ne blöde Frage: Warum schlägst Du Dich mit einem FSO- Objekt rum, was eh nur unter Windows funktioniert, und u.U. in jeder Windows- Version anders, wenn Du einfach Standard LotusScript verwenden kannst?

Kill fileName
bzw.
rmDir directoryName

sind jeweils eine Zeile Code, und funktionieren auf jeder Plattform auf der der Domino läuft. Wenn Du dann in den Agenteneinstellungen die Sicherheit noch auf "Allow Restricted Operations" setzt, dann ist das alles gar kein Problem, und Du musst Dich nicht mit irgend einem Objekt rumschlagen...
Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: buzi am 19.06.13 - 09:04:20
Hallo Torsten,

du hast natürlich Recht. Ich hatte es auch erst mit Dir etc. implementiert bin da auf das gleiche Problem gestoßen. Dann dachte ich die Lösung ist FSO. Gefällt mir auch besser zum coden weil ich aus dem Java/C#-Umfeld komme und mir die Script-Funktionen von Lotus manchmal ziemlich viel Zeit zum Verstehen kosten :-) auch wenn sie dann am Ende sehr praktisch sind.

Wie gesagt, löschen kann ich das temp-Dir so oder so nicht :-(
Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: buzi am 30.07.13 - 11:32:39
Die Dateien haben z.T. einen Schreibschutz! Wie kann ich diesen umgehen?
Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: ascabg am 30.07.13 - 11:37:22
Hallo,

Ganz simple gesagt, wenn Du entsprechende Rechte hast, diesen ausschalten und die Dateien dann loeschen.


Andreas
Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: buzi am 30.07.13 - 11:46:49
Übrigens

rmDir directoryName

bringt path/file access error
Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: buzi am 30.07.13 - 11:47:59
Die einzelnen Dateien haben gar keinen Schreibschutz! Aber der Ordner den ich versuche zu löschen hat in den Eigenschaften das Kästchen ausgefüllt bei Schreibschutz.....
Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: ascabg am 30.07.13 - 11:50:39
Und wo bitte besteht der Unterschied, ob ich das 'Flag' (Attribut) des Schreibschutzes
bei einem Ordner bzw. einer Datei setzen oder loeschen will?


Andreas

P.S.:
Im Uebrigen bewegen wir uns hier schon lange nicht mehr auf dem Gebiet der Notes/Domino-Programmierung.
Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: buzi am 31.07.13 - 09:36:31

Ok, also nochmal die Bitte um Hilfe. Ich habe die Anforderung, Daten nach Open Office Writer zu exportieren aus Lotus Notes. Ich schreibe in Lotus Script eine Funktion, die einen temporären Dateipfad anlegt, dort Dateien ablegt, und dieses Verzeichnis am Ende des Exports wieder löscht. Egal, wo ich diesen Pfad anlege (auf C direkt oder am Desktop...) - der Ordner lässt sich hinterher per Lotus Script nicht mehr löschen, per Hand aber schon und das ohne Rückfrage.

Schreibe ich es in LS: RmDir bekomme ich den Fehler "path/file access error". Darum versuchte ich es mit dem FSO, aber da meldet die Laufzeit "OLE: Automation object error".

Also, wie lege ich einen temporären Ordner an, den ich danach wieder löschen kann, in Lotus Script (ist mir natürlich lieber als FSO)...?
Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: dnotes am 31.07.13 - 10:01:40
Ich habe das jetzt mal aus der Hilfe kopiert:
MkDir "c:\test"
RmDir "c:\test"

Die von Dir besagte Fehlermeldung kommt bei mir nur bei:

1. MkDir "c:\test"  -> wenn das Verzeichnis bereits existiert
2. RmDir "c:\test" -> wenn das Verzeichnis nicht leer ist.
Da müsste dann vorher das Verzeichnis gellert werden.
Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: buzi am 31.07.13 - 10:05:07
Ja, beides ist der Fall. Ich bräuchte entweder die Funktion MkDir mit Option "Überschreiben wenns schon existiert" oder die Funktion RmDir mit Option "Lösche auch den Inhalt". Sorry, komme aus der objektorientierten Welt und stoße bei Lotus Script manchmal einfach auf unsichtbare Mauern...  :-:
Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: ascabg am 31.07.13 - 10:17:14
Hallo,

Und was waere, wenn es jetzt auch etwas unlogisch klingt, wenn Du es mit der guten alten DOS-Variante
versuchst?
Da gibt es ja auch einen rmdir-Befehl. Und bei diesem kannst Du den Parameter /S (rmdir /S <Verzeichnis>) mitgeben
der dann auch gleich noch den gesamten Inhalt des zu loeschenden Verzeichnisses loescht.


Andreas
Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: buzi am 31.07.13 - 10:21:15
In der Dos-Console geht es natürlich. Gibt zwar ne Rückfrage "Wollen Sie... (j/n)" aber geht. Genauso wie wenn ich es manuell mache, also mit Maus bzw. Tastatur im Explorer. Warum nur will mein Code es nicht für mich tun? Kann ich den Dos-Code in mein Script aufnehmen oder wie?
Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: Keydins am 31.07.13 - 10:22:00
Merk dir doch in einer Liste oder einem Array die Namen der von dir erzeugten Dateien und lösche nach Abschluss der Verarbeitung alle gespeicherten Dateien über eine Schleife per 'Kill'. Bei diesem Vorgehen kannst du dir dann das Löschen des temp-Verzeichnises sparen, da du das ja bei der nächsten Verarbeitung sicher wieder brauchen wirst.

Du kannst z.B. über die 'Environ' Funktion im Windowsumfeld das temp-Verzeichnis des Betriebssystems abfragen und es für deine Zwecke als Zwischenspeicher nutzen, am Besten in Verbindung mit der Kill-Löschschleife, um unnützen Datenmüll zu vermeiden.
Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: buzi am 31.07.13 - 10:57:06
Ein Kill auf den Dateien habe ich auch schon versucht. Da bekomme ich die selbe Fehlermeldung.
Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: dnotes am 31.07.13 - 11:07:14
Mit diesem Code werden alle Dateien aus dem angegebenen Verzeichnis gelöscht und abschließend das Verzeichnis.

Code
        path = "c:\Test\" 
	Dim sess As New NotesSession
	Dim alleDateien As Variant
	Dim filename As String
	Dim filepath As String
	Dim sep As String
	If path <> "" Then
		
		If Instr(sess.Platform, "Windows") > 0 Then
			sep = "\" 
		Else
			sep = "/" 
		End If
		Redim alleDateien(0)
		If Instr(path, sep) > 0 Then
			filepath = Strleftback(path, sep) 
		End If
		filename = Dir(path, 16)
		While filename <> ""
			If filename <> "." And filename <> ".." Then
				If (Getfileattr(filepath & sep & filename) And 16 >0) Then 
					
					alleDateien = Arrayappend(alleDateien,filepath & sep & filename )
					
				End If
			End If
			filename = Dir 
		Wend
		alleDateien = Fulltrim(alleDateien)
	End If
	Forall DT In alleDateien
		Kill DT
	End Forall
	Rmdir path
Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: ascabg am 31.07.13 - 12:41:16
Man koennte ihm in der DOS-Box ja auch noch zusaetzlich den Parameter /Q mitgeben.


Andreas
Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: Peter Klett am 31.07.13 - 12:53:04
Kann es sein, dass, während Du mit Script die Dateien/den Ordner löschen willst, die Dateien noch von Open Office Writer gesperrt sind und es deshalb nicht funktioniert?

Du könntest testweise den Teil des Scriptes in eine andere Routine auslagern, der nur das Löschen vornimmt, und diese Routine separat laufen lassen. Funktioniert es dann, weißt Du, dass es "in einem Rutsch" nicht geht.

Dann solltest Du Die Löschroutine woanders unterbringen, z.B. im Queryclose des Dokuments, aus dem Du die Aktion startest, oder im Queryclose der Datenbank.
Titel: Re: Verzeichnis mit Hilfe eines FSO löschen
Beitrag von: buzi am 31.07.13 - 13:35:19

Hallo dnotes,

dein Code hat geholfen! So werden die Dateien gelöscht und das Verzeichnis kann auch gelöscht werden. Ohne Fehler. Tausend Dank!!!!

Melanie