Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: CLI_Andreas_Schmidt am 05.12.06 - 13:53:29
-
Hi @Dev,
ich versuche mich gerade an der folgenden Funktion:
Open "c:\importordner\txt\" & fileName$ For Input As fileNum%
Gibt es hier auch ein vernünftiges Errorhandling ? Was ist, wenn der file gar nicht da ist ? Ein isOpen(File) habe ich so nicht gefunden. Ich habe schon mit der Stream-Klasse gearbeitet. Aber die guckt leider nur auf (Verzeichnis leer oder nicht leer).
Aber die Frage hier heißt. Wie prüfe ich ab, ob eine bestimmte Datei tatsächlich da ist ?
-
mit
strFileName = Dir$( "c:\importordner\txt\" & fileName$ , 0 )
Kannst Du prüfen, ob die Datei vorhanden ist (strFileName <> "")
-
Hallo,
wenn auf Windows-Rechnern arbeitest kann du auch mit den FileSystemObject arbeiten. Dieses bietet viele und sehr bequeme Möglichkeiten auf das Vorhandensein von Dateien und Verzeichnissen zu prüfen.
Rainer
-
@Rainer: Poste doch mal ein Beispiel dafür.
Andreas
-
Ich habe den Code mal unten reingehängt. Was soll das Script tun ?
1. Sehe in Verzeichnis txt und nehme das erste file
2. Öffne es und lese den Dateinahmen aus (zeile 2) und suche dann in Verzeichnis doc nach der Datei.
Der Code funktioniert auch soweit. Ein Fehler ist jedoch noch drin, denn in Zeile X s.u. wird der erste File gezogen. In Zeile Y springt der Cursor bereits auf File 2 aus dem txt-Verzeichnis. Das soll aber nicht sein. Das Programm arbeitet also den ersten File nicht ab. Also ein Schleifenproblem.
---------------------->
Sub Initialize
On Error Goto fehlermeldung
Dim s As New NotesSession
Dim db As NotesDatabase
Dim logdb As NotesDatabase
Dim logdoc As NotesDocument
Dim newdoc As NotesDocument
Dim rtitem As NotesRichTextItem
Dim strFileName As String
Set db = s.CurrentDatabase
Dim fileName As String
Dim pathName As String
pathName$ = "c:\ordner\txt\*.txt"
fileName$ = Dir$(pathName$, 0) -------------------------> ZEILE X
Dim txt As String
Dim fileNum As Integer
Dim counter As Integer
Dim var() As String
Dim getdocstringfile As String
Dim getdocstringmail As String
Dim getdocstringsubject As String
Dim getdocstringbody As String
Dim countvar As Integer
Do
counter% = 0
fileNum% = Freefile
Open "c:\ordner\txt\" & fileName$ For Input As fileNum%
fileName$ = Dir$() -------------------> Zeile Y
Do While Not Eof(fileNum%)
Line Input #fileNum%, txt$ ' Read each line of the file.
Redim Preserve var(counter%)
var(counter%) = txt$
counter% = counter% + 1 ' Increment the line count.
Loop
Close fileNum%
getdocstringmail = var(0)
getdocstringfile = var(1)
getdocstringsubject = var(2)
getdocstringbody = var(3)
strFileName = Dir$( "c:\ordner\doc\" & getdocstringfile , 0 )
If strFileName <> "" Then
Open "c:\ordner\doc\" & getdocstringfile For Input As fileNum%
Set newdoc = db.CreateDocument
Call newDoc.ReplaceItemValue("FORM","Memo")
Call newDoc.ReplaceItemValue("Sendto", getdocstringmail)
Call newDoc.ReplaceItemValue("Subject", getdocstringsubject)
Set rtitem = New NotesRichTextItem( newdoc, "Body" )
Call rtitem.EmbedObject(EMBED_ATTACHMENT,"", "c:\ordner\doc\" & getdocstringfile )
Call rtitem.AddNewline(2)
Call rtitem.AppendText(getdocstringbody)
Call newdoc.Send(True)
newdoc.Save True,False
countvar = 1
End If
Loop Until fileName$ = ""
Exit Sub
fehlermeldung:
Print "Error" & Str(Err) & ": " & Error$
End Sub
-
Der Fehler ist gefunden.
fileName$ = Dir$(pathName$, 0)
strFileName = Dir$( "c:\ordner\doc\" & getdocstringfile , 0 )
Diese beiden Zeilen verwenden die Variable (Dir$). Der Fehler ist, dass die zweite Zeile den Inhalt aus Zeile 1 überschreibt. Man darf die Dir-Varibale nicht zum Suchen in zwei verschiedenen Verzeichnissen verwenden. Gefunden wie ? Debugger.
-
@Rainer: Poste doch mal ein Beispiel dafür.
Andreas
Gedächtnisprotokoll:
dim fs as variant
set fs=CreateObject("Scripting.FileSystemObject")
if fs.FileExists("c:\file.txt")=true then
msgbox("File exists")
else
msgbox("File does not exist!")
end if
set fs=nothing
-
Genau dieses Lösung habe ich dann auch verwendet.
: )
Prima, Danke