Autor Thema: Mail + Attachment im Filesystem speichern  (Gelesen 31488 mal)

Offline gere

  • Aktives Mitglied
  • ***
  • Beiträge: 216
  • Geschlecht: Männlich
Mail + Attachment im Filesystem speichern
« am: 18.08.05 - 09:32:00 »
Hallo Notes-Götter,

Ich habe ein sehr dringendes Problem, und zwar brauch ich ein Script, das es ermöglicht, Emails und deren Attachments (falls vorhanden) in einem fest definierten Ordner im FileSystem zu speichern. Der Email-Text soll dabei als Textfile gespeichert werden. Ich hab da schon ewig rumprobiert, nur leider hab ich nicht genug Erfahrung mit sowas.

Hat jemand so etwas auf Lager?

Danke + Gruß
Gere

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Mail + Attachment im Filesystem speichern
« Antwort #1 am: 18.08.05 - 09:36:25 »
Hi,

ich hab mal sowas ähnliches gebaut. Der Mailtext wird als Word-Dokument in einem, vom User frei wählbaren Verzeichnis gespeichert. Die Attachments werden ebenfalls in diesem Verzeichnis gespeichert und als Link ins Word-Dokument eingefügt.

Interessant für dich?


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline gere

  • Aktives Mitglied
  • ***
  • Beiträge: 216
  • Geschlecht: Männlich
Re: Mail + Attachment im Filesystem speichern
« Antwort #2 am: 18.08.05 - 09:42:06 »
Hi Axel,

Das wäre eigentlich genau das was ich suche...

Gruß Gerhard

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Mail + Attachment im Filesystem speichern
« Antwort #3 am: 18.08.05 - 10:12:57 »
Hi,

das Ganze habe ich in einen Agenten gepackt:

Code
(Options) - Section
Option Public
Use "libWord"
Use "FileLibrary"

Initialize - Section
Sub Initialize
	
	Dim workspace As New NotesUIWorkspace
	Dim uidoc As NotesUIDocument
	Dim doc As NotesDocument
	Dim rtitem As NotesRichTextItem
	Dim clsWord As cWord
	Dim intTitel As Integer
	Dim idx As Integer
	Dim intAbbruch As Integer
	Dim varName As Variant
	Dim varResult As Variant	
	Dim cFile As CFile
	Dim strMacro As String
	Dim strFileName As String
	Dim arrFiles() As String 
	
	Const ATTR_READONLY = 1
	
	intAbbruch = 0
	Redim arrFiles(0)
	
	On Error Goto ErrorHandling
	
	Set uidoc = workspace.CurrentDocument
	Set doc = uidoc.Document
	
	'Extrahieren des allgemeinen Namens aus dem Mail-Absender
	strMacro =  | @Name([CN]; DisplayFrom)|
	varName = Evaluate(strMacro, doc)
	'Messagebox varName(0) 
	
	'Wenn im allgm. Namen " enthalten sind, werden sie entfernt
	If Instr(varName(0), Chr$(34)) > 0 Then
		strMacro =   | @ReplaceSubstring(| & varName(0) & |; @Char(34); "")|
		varName = Evaluate(strMacro,doc)
		'Messagebox varName(0) 		
	End If  'If Instr(varName(0), Chr$(34)) > 0 Then
	
	'Austausch der : in . bei Uhrzeit
	strMacro =  | @ReplaceSubstring("| & doc.DisplayDate(0) & |"; ":"; ".")|
	varResult = Evaluate(strMacro)
	'Austausch des Leerzeichens in _ 
	strMacro =  | @ReplaceSubstring("| & varResult(0) & |"; " "; "_")|
	varResult = Evaluate(strMacro)
	
	'Abfrage des Verzeichnisses und des Dateinamens
	Set cFile = New cFile
	cFile.DefaultDir = ""
	cFile.DefaultFilename = varName(0) & " " & varResult(0) 'Vorgabedateiname ist der allg. Name des Senders und Empfangsdatum
	cFile.Title = "Mail-Export"
	cFile.Filter = "Word-Dokument (*.doc)" & Chr$(0) & "*.doc" & Chr$(0) & "Alle Dateien (*.*)" & Chr$(0) &  "*.*" & Chr$(0)
	cFile.FilterIndex = 1
	
	result = cFile.FileSaveDlg
	If result = 0 Then
		Messagebox "Der Export wurde abgegrochen.", 64, "Mail-Export"		
		Exit Sub
	End If 'If result = 0 Then
	
	While Dir$(cFile.Filename, 0) <> ""
		Messagebox "Der angegebene Dateiname ist bereits vorhanden." & Chr$(10) & "Bitte geben Sie einen anderen Dateinamen ein.", 48, "Mail-Export"
		result = cFile.FileSaveDlg
		If result = 0 Then
			Messagebox "Der Export wurde abgegrochen.", 64, "Mail-Export"		
			Exit Sub
		End If 'If result = 0 Then
	Wend  'While Dir$(cFile.Filename, 0) <> ""
	
	'Neue Instanz der Klasse cWord
	Set clsWord = New cWord
	'Neues Dokument auf Basis der Vorlage erstellen
	Call clsWord.CreateNewDoc("Normal")
	'Formatiertes Einfügen der Mail-Header Infos 
	Call clsWord.SetFontAttributes("Arial", 10, True, False, False)
	Call clsWord.Insert("Mail von:  ") 
	Call clsWord.SetFontAttributes("Arial", 10, False, False, False)       
	Call clsWord.Insert(doc.DisplayFrom(0))
	Call clsWord.Newline(1)
	Call clsWord.SetFontAttributes("Arial", 10, True, False, False)
	If Isdate(doc.DeliveredDate(0)) Then
		Call clsWord.Insert("Mail eingegangen am:  ") 
	Else
		Call clsWord.Insert("Mail gesendet am:  ") 
	End If  'If Isdate(doc.DeliveredDate(0)) Then
	Call clsWord.SetFontAttributes("Arial", 10, False, False, False)       
	Call clsWord.Insert(Cstr(doc.DisplayDate(0)))
	Call clsWord.Newline(2)
	Call clsWord.SetTab(2.5)
	
	Call clsWord.SetFontAttributes("Arial", 10, True, False, False)
	Call clsWord.Insert("An:  ")
	Call clsWord.SetFontAttributes("Arial", 10, False, False, False)  
	strMacro =  | @Name([Abbreviate]; SendTo)|
	varName = Evaluate(strMacro, doc)
	For idx = 0 To Ubound(varName)
		Call clsWord.Insert(Chr$(9) & varName(idx))
		Call clsWord.Newline(1)		
	Next  'For idx = 0 To Ubound(varName)
	
	Call clsWord.SetFontAttributes("Arial", 10, True, False, False)       	
	Call clsWord.Insert("Kopie:  ")
	Call clsWord.SetFontAttributes("Arial", 10, False, False, False)       	
	strMacro =  | @Name([Abbreviate]; CopyTo)|
	varName = Evaluate(strMacro, doc)
	For idx = 0 To Ubound(varName)
		Call clsWord.Insert(Chr$(9) & varName(idx))
		Call clsWord.Newline(1)		
	Next  'For idx = 0 To Ubound(varName)
	
	Call clsWord.SetFontAttributes("Arial", 10, True, False, False)       
	Call clsWord.Insert("Bindkopie:  ")
	Call clsWord.SetFontAttributes("Arial", 10, False, False, False) 
	strMacro =  | @Name([Abbreviate]; BlindCopyTo)|
	varName = Evaluate(strMacro, doc)
	For idx = 0 To Ubound(varName)
		Call clsWord.Insert(Chr$(9) & varName(idx))
		Call clsWord.Newline(1)		
	Next  'For idx = 0 To Ubound(varName)
	
	Call clsWord.Newline(2)
	
	Call clsWord.SetFontAttributes("Arial", 10, True, False, False)       
	Call clsWord.Insert("Thema:  ")
	Call clsWord.SetFontAttributes("Arial", 10, False, False, False)       
	Call clsWord.Insert(doc.Subject(0))
	Call clsWord.Newline(2)
	
	Call clsWord.ClearAllTabs
	
	'einfügen des Mailinhaltes als Text
	Set rtitem = doc.GetFirstItem( "Body" )
	If ( rtitem.Type = RICHTEXT ) Then
		Call clsWord.Insert(rtitem.GetFormattedText( False, 0 ))
	End If  'If ( rtitem.Type = RICHTEXT ) Then
	
	'Lösen der Anhänge ins gewählte Verzeichnis und einfügen eines Links in Dokument
	intTitel = 0
	idx = 0
	If ( rtitem.Type = RICHTEXT ) Then
		If xHasDocAttachments(doc) Then
			Forall o In rtitem.EmbeddedObjects
				If ( o.Type = EMBED_ATTACHMENT ) Then
					strFileName = Cstr(cFile.ExtractFilePath(cFile.Filename)) & o.Name
					While Dir$(strFileName, 0) <> "" And intAbbruch <> 1
						varResult = workspace.Prompt( PROMPT_OKCANCELEDIT, "Mail-Export", "Eine Datei mit diesem Namen ist bereits vorhanden." & Chr$(10) &_
						"Bitte vergeben Sie einen anderen Namen", strFileName, "")
						If Isempty(varResult) Then
							intAbbruch = 1
						Else
							strFileName = Cstr(varResult)
						End If  'If Isempty(varResult) Then
					Wend  'Do While Dir$(strFileName, 0) <> ""
					If intAbbruch Then Exit Forall
					
					If intTitel = 0 Then
						Call clsWord.Newline(2)
						Call clsWord.Insert("Es sind folgende Dateianhänge vorhanden:")
						Call clsWord.Newline(1)
						intTitel = 1
					End If  'If intTitel = 0 Then
					Redim Preserve arrFiles(idx)
					arrFiles(idx) = strFileName
					idx = idx + 1
					Call clsWord.InsertLink(strFileName, Cstr(cFile.ExtractFileName(strFileName)))
					Call clsWord.Newline(1)
					'Dateianhang lösen
					Call o.ExtractFile (strFileName)
					Setfileattr strFileName , ATTR_READONLY
				End If
			End Forall			
		End If  'If xHasDocAttachments(doc) Then
	End If  'If ( rtitem.Type = RICHTEXT ) Then
	
	If intAbbruch Then
		'Export abgebrochen
		'Word wird ohne zu speichern beendet
		Call clsWord.CloseWord	
		Delete clsWord
		'Alle bisher gelösten Dateien werden gelöscht
		For idx = 0 To Ubound(arrFiles)
			If arrFiles(idx) <> "" Then
				Setfileattr arrFiles(idx) , ATTR_NORMAL				
				Kill arrFiles(idx)
			End If  'If arrFiles(idx) <> "" Then
		Next  'For idx = 0 To Ubound(arrFiles)
		Messagebox "Der Export wurde abgegrochen.", 64, "Mail-Export"
	Else
		'Worddokument wird gespeichert und Word wird beendet
		Call clsWord.SaveDoc(Cstr(cFile.Filename))
		Call clsWord.CloseWord	
		Delete clsWord
		
		'Setzen des Schreibschutzes auf Word-DAtei
		Setfileattr Cstr(cFile.Filename), ATTR_READONLY
		
		Messagebox "Das Mail wurde erfolgreich exportiert.", 64, "Mail-Export"		
	End If  'If intAbbruch Then
	
	Exit Sub
	
ErrorHandling:
	Messagebox "Das Mail konnte nicht exportiert werden." + Chr$(13) + "Fehler: " + Str$(Err) + " -> '" + Error$ + _
	"' in Zeile " + Str$(Erl) , 16, "Mail-Export"
	
	'Aufräumen
	If Not (clsWord Is Nothing) Then
		Call clsWord.CloseWord
		Delete clsWord
	End If  'If Not (clsWord Is Nothing) Then
	
	Exit Sub         
	
End Sub


Function xHasDocAttachments(doc As NotesDocument) As Integer
	
	Dim vEval As Variant
	vEval = Evaluate("@Attachments", doc)
	If vEval(0) = 0 Then 
		xHasDocAttachments = False
	Else
		xHasDocAttachments = True
	End If
	
End Function

Den Code der benötigten Script-Lib habe ich angehängt. Den Agent starte ich über einen Aktions-Button in der Memo- und den beiden Antwortmasken.


Axel

Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline gere

  • Aktives Mitglied
  • ***
  • Beiträge: 216
  • Geschlecht: Männlich
Re: Mail + Attachment im Filesystem speichern
« Antwort #4 am: 18.08.05 - 10:20:55 »
Super, vielen herzlichen Dank!!!
Werd ich gleich testen.

Gruß Gere

Offline shiraz

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 648
  • Geschlecht: Männlich
Re: Mail + Attachment im Filesystem speichern
« Antwort #5 am: 18.08.05 - 16:35:31 »
Hi Axel,

es funzt einwandfrei!!

 ;D
Gruß
Christian

Offline gere

  • Aktives Mitglied
  • ***
  • Beiträge: 216
  • Geschlecht: Männlich
Re: Mail + Attachment im Filesystem speichern
« Antwort #6 am: 18.08.05 - 16:43:38 »
Hallo Axel,

Super, das Script rennt total gut! Ich hab im Agent noch eingebaut, dass für jede abgelegte Email ein eigenes Verzeichnis mit Datum/Uhrzeit im FileSystem angelegt wird.
Vielen Dank nochmal, Du hast mich enorm weitergebracht!

Gruß Gere

Offline (h)uMan

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.056
  • Geschlecht: Männlich
  • Wird schon ...
Re: Mail + Attachment im Filesystem speichern
« Antwort #7 am: 17.10.05 - 11:24:38 »
Hallo,

ich bräuchte eine Lösung, um nur vorhandene Attachments von Dokumenten (Auswahl über Ansichten oder Ordner im Notes Client) im Filesystem mit analoger Ordnerstruktur wie in der MailDB zu speichern.

Bin kein Entwickler, daher auf Hilfe angewiesen ...

SG, Neo
Beste Grüße, Uwe

Offline gere

  • Aktives Mitglied
  • ***
  • Beiträge: 216
  • Geschlecht: Männlich
Re: Mail + Attachment im Filesystem speichern
« Antwort #8 am: 17.10.05 - 12:59:13 »
Hallo,

Ich hätte einen Agenten, der es ermöglicht, Dateien aus einer Datenbank ins File System zu lösen. Dabei werden Ordner erstellt, die nach dem Erstelldatum der jeweiligen Datei benannt werden. Aber das könntest Du relativ einfach anpassen, auch wenn Du kein Entwickler bist. Bist Du daran interessiert?

Gruß Gere

Offline (h)uMan

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.056
  • Geschlecht: Männlich
  • Wird schon ...
Re: Mail + Attachment im Filesystem speichern
« Antwort #9 am: 17.10.05 - 16:38:51 »
Hallo,

bin noch in der Sandbox fündig geworden und werde den Agenten erstmal testen.

http://www-10.lotus.com/ldd/sandbox.nsf/ecc552f1ab6e46e4852568a90055c4cd/fe7542cd3b120e1b00256c38004a6a27?OpenDocument&Highlight=0,detach

Vielen Dank für die Infos.

SG, Neo
Beste Grüße, Uwe

Rachimow

  • Gast
Re: Mail + Attachment im Filesystem speichern
« Antwort #10 am: 07.02.06 - 22:57:45 »
Hallo ich kann leider die Datei nicht herrunterladen.

Bin für jeden Tip dankbar

hydae

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Mail + Attachment im Filesystem speichern
« Antwort #11 am: 07.02.06 - 23:19:15 »
Um welche Datei geht es denn? Und warum ist "Rachimow" bereits wieder abgemeldet?
Was soll das?

NotesForum

  • Gast
Re: Mail + Attachment im Filesystem speichern
« Antwort #12 am: 08.02.06 - 18:04:22 »
Hatte 2 Zugange deswegen habe ich den einen gelöscht.

Problem hat sich erledigt.

Rachimow

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Mail + Attachment im Filesystem speichern
« Antwort #13 am: 08.02.06 - 18:37:51 »
Erstaunlich. Rachimow angemeldet und unterschreibt mit "hydae". Hydrae angemeldet und unterschreibt mit Rachimow.

Eine "vertrauensbildende Massnahme" ist das nicht gerade ...

Bernhard Köhler

Offline LDCOE

  • Junior Mitglied
  • **
  • Beiträge: 61
  • Geschlecht: Männlich
Re: Mail + Attachment im Filesystem speichern
« Antwort #14 am: 17.02.06 - 15:58:55 »
Hallo,
bin leider kein Entwickler und habe Probleme mit den LSS Dateien. Wo muss ich diese einfügen? Unter Declarations mit Datei-> importieren?   
Vielen Dank vorab für eure Mühe!

Gruss Jens
Schönen Tag noch!

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Mail + Attachment im Filesystem speichern
« Antwort #15 am: 17.02.06 - 16:44:48 »
Nimm den Code aus den LSS-Dateien und füge in jeweils in eine neue Script-Bibliothek ein. Benenne die Bibliothek dann so wie die LSS-Datei heißt.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline LDCOE

  • Junior Mitglied
  • **
  • Beiträge: 61
  • Geschlecht: Männlich
Re: Mail + Attachment im Filesystem speichern
« Antwort #16 am: 20.02.06 - 10:34:14 »
Hallo, herzlichen Dank für die Antwort,
ich habe die Script-Bibliotheken angelegt wie beschreiben. Nach den Bibs habe ich den Agenten neu erstellt.
Es scheint wohl ein Problem mit der Klasse Cfile zu geben, in der Zeile:
"Dim cFile As CFile"   kommt die Meldung "Class or File Name not found".
Hast du einen Tipp woher dieser Fehler kommen könnte?


Gruss Jens 

Schönen Tag noch!

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Mail + Attachment im Filesystem speichern
« Antwort #17 am: 20.02.06 - 10:42:29 »
Hast du die Bibliotheken auch mit Use ... in den Agenten eingebunden.

Code

(Options) - Section
Option Public
Use "libWord"
Use "FileLibrary"
...


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline LDCOE

  • Junior Mitglied
  • **
  • Beiträge: 61
  • Geschlecht: Männlich
Re: Mail + Attachment im Filesystem speichern
« Antwort #18 am: 20.02.06 - 11:18:41 »
Hallo,
ja das habe ich, den oberen Teil habe ich bei Options, den Rest bei Initialize einkopiert. Der Options Teil Sieht folgendermassen aus:

Option Public
Use "libWord"
Use "FileLibrary"

Die Script-Lib habe ich über Importieren jeweils in eine neue Bib kopiert und entsprechende Namen vergeben.
Hab ich noch was vergessen?

Gruss Jens
Schönen Tag noch!

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Mail + Attachment im Filesystem speichern
« Antwort #19 am: 20.02.06 - 11:35:50 »
Unter Umständen ist beim Importieren des Codes was schiefgegangen und das Ganze steht nicht in den richtigen Abschnitten,

Deine Lib FileLibrary müsste so aussehen

Abschnitt (Options)
Code
Option Public
%INCLUDE "LSCONST.LSS"

Abschnitt (Declarations)
Code
'Struktur für Dateidialoge definieren
Type fileDlgStruct
	lStructSize As Long     
	hwndOwner As Long     
	hInstance As Long     
	lpstrFilter As String     
	lpstrCustomFilter As Long     
	nMaxCustFilter As Long     
	nFilterIndex As Long     
	lpstrFile As String     
	nMaxFile As Long     
	lpstrFileTitle As String     
	nMaxFileTitle As Long     
	lpstrInitialDir As String     
	lpstrTitle As String     
	Flags As Long     
	nFileOffset As Integer     
	nFileExtension As Integer     
	lpstrDefExt As String     
	lCustData As Long     
	lpfnHook As Long     
	lpTemplateName As Long          
End Type

'Funktionen aus DLL
Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (fileDlg As fileDlgStruct)  As Long
Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (fileDlg As fileDlgStruct)  As Long

'Konstanten für Dateidialog festlegen
Const OFN_ALLOWMULTISELECT = &H200
Const OFN_CREATEPROMPT = &H2000
Const OFN_ENABLEHOOK = &H20
Const OFN_ENABLETEMPLATE = &H40
Const OFN_ENABLETEMPLATEHANDLE = &H80
Const OFN_EXPLORER = &H80000                      
Const OFN_EXTENSIONDIFFERENT = &H400
Const OFN_FILEMUSTEXIST = &H1000
Const OFN_HIDEREADONLY = &H4
Const OFN_LONGNAMES = &H200000             
Const OFN_NOCHANGEDIR = &H8
Const OFN_NODEREFERENCELINKS = &H100000
Const OFN_NOLONGNAMES = &H40000  
Const OFN_NONETWORKBUTTON = &H20000
Const OFN_NOREADONLYRETURN = &H8000
Const OFN_NOTESTFILECREATE = &H10000
Const OFN_NOVALIDATE = &H100
Const OFN_OVERWRITEPROMPT = &H2
Const OFN_PATHMUSTEXIST = &H800
Const OFN_READONLY = &H1
Const OFN_SHAREAWARE = &H4000
Const OFN_SHAREFALLTHROUGH = 2
Const OFN_SHARENOWARN = 1
Const OFN_SHAREWARN = 0
Const OFN_SHOWHELP = &H10

'Klasse cFiel
Class cFile
	
	'öffentliche Eigenschaften der Klasse
	Public DefaultDir As String  'Vorgabeverzeichnis
	Public DefaultFilename As String  'Vorgabedateiname
	Public FileName As String  'gewählter Dateiname incl. Verzeichnis
	Public FileTitle As String  'gewählter Dateiname
	Public Filter As String  'Liste für Filter
	Public FilterIndex As Integer  'Index für Vorgabefilter
	Public Title As String	'Titel der Dialogbox
	
	'private Klasseneigenschaften
	myfileDlg As fileDlgStruct
	
	'Methode für Datei-Öffnen Dialog
	Function FileOpenDlg () As Integer
		
		Dim APIResults As Integer
		Dim szFileName As String *255
		Dim szFileTitle As String *255
		Dim szCurrentDir As String *255
		Dim Index As Integer
		
          'Speicher für Rückgabestrings allokieren
		szFileName = Chr$(0) & Space$(255) & Chr$(0)
		szFileTitle = Space$(255) & Chr$(0)
		
          'Vorgabe - Extension initialisieren.     
		DefExt = Chr$(0)
		
          'Vorgabewerte setzen
		szCurrentDir = DefaultDir & Chr$(0)
		szFileName = DefaultFileName & Chr$(0)
		Title = Title & Chr$(0)
		
          'FilterIndex prüfen
		If FilterIndex <= 0 Then FilterIndex = 1
		
         'Initialisierung der Datenstruktur
		myFileDlg.lStructSize = Len(myFileDlg)
		
		myFileDlg.hwndOwner = 0&  'If the OpenFile Dialog box is not linked to any form use this line.It will pass a null pointer.
		myFileDlg.lpstrFilter =  Filter     
		myFileDlg.nFilterIndex = FilterIndex
		myFileDlg.lpstrFile = szFileName     
		myFileDlg.nMaxFile = Len(szFileName)     
		myFileDlg.lpstrFileTitle = szFileTitle     
		myFileDlg.nMaxFileTitle = Len(szFileTitle)     
		myFileDlg.lpstrTitle = Title     
		myFileDlg.Flags = OFN_LONGNAMES + OFN_HIDEREADONLY + OFN_PATHMUSTEXIST
		myFileDlg.lpstrDefExt = DefExt     
		myFileDlg.hInstance = 0     
		myFileDlg.lpstrCustomFilter = 0     
		myFileDlg.nMaxCustFilter = 0     
		myFileDlg.lpstrInitialDir = szCurrentDir     
		myFileDlg.nFileOffset = 0     
		myFileDlg.nFileExtension = 0     
		myFileDlg.lCustData = 0     
		myFileDlg.lpfnHook = 0     
		myFileDlg.lpTemplateName = 0     
		
		'Anzeigen des Dialoges
		APIResults = GetOpenFileName(myFileDlg)
		
		'Bearbeiten der Rückgabewerte
		If APIResults <> 0 Then                    
			szFileName = Cstr( myFileDlg.lpstrFile )          
			szFileTitle = Cstr( myFileDlg.lpstrFileTitle )
			FileName = Left$(szFileName, Instr(szFileName, Chr$(0)))
			FileTitle = Left$(szFileTitle, Instr(szFileTitle, Chr$(0)))
			FileOpenDlg = 1          
		Else           
			FileOpenDlg = 0
		End If  'If APIResults <> 0 Then                    
		
	End Function 'Function FileOpenDlg () As Integer
	
	
	'Methode für Datei-Speichern Dialog
	Function FileSaveDlg()
		
		Dim APIResults As Integer
		Dim szFileName As String *255
		Dim szFileTitle As String *255
		Dim szCurrentDir As String *255
		
          'Speicher für Rückgabestrings allokieren
		FileName = Chr$(0) & Space$(255) & Chr$(0)
		szFileTitle = Space$(255) & Chr$(0)
		
         'Vorgabe - Extension initialisieren.     
		DefExt = Chr$(0)
		
          'Setzen der Vorgabewerte
		szCurrentDir = DefaultDir  & Chr$(0)
		szFileName = DefaultFileName & Chr$(0)
		Title = Title & Chr$(0)
		
          'FilterIndex prüfen
		If FilterIndex <= 0 Then FilterIndex = 1
		
         'Initialisierung der Datenstruktur
		myFileDlg.lStructSize = Len(myFileDlg)
		
		myFileDlg.hwndOwner = 0&  'If the OpenFile Dialog box is not linked to any form use this line.It will pass a null pointer.
		myFileDlg.lpstrFilter =  Filter     
		myFileDlg.nFilterIndex = FilterIndex     
		myFileDlg.lpstrFile = szFileName     
		myFileDlg.nMaxFile = Len(szFileName)     
		myFileDlg.lpstrFileTitle = szFileTitle     
		myFileDlg.nMaxFileTitle = Len(szFileTitle)     
		myFileDlg.lpstrTitle = Title     
		myFileDlg.Flags = OFN_FILEMUSTEXIST + OFN_LONGNAMES + OFN_HIDEREADONLY + OFN_PATHMUSTEXIST
		myFileDlg.lpstrDefExt = DefExt     
		myFileDlg.hInstance = 0     
		myFileDlg.lpstrCustomFilter = 0     
		myFileDlg.nMaxCustFilter = 0     
		myFileDlg.lpstrInitialDir = szCurrentDir     
		myFileDlg.nFileOffset = 0     
		myFileDlg.nFileExtension = 0     
		myFileDlg.lCustData = 0     
		myFileDlg.lpfnHook = 0     
		myFileDlg.lpTemplateName = 0     
		
		'Anzeigen des Dialoges
		APIResults = GetSaveFileName(myFileDlg)
		
		'Bearbeiten der Rückgabewerte
		If APIResults <> 0 Then                    
			szFileName = Cstr( myFileDlg.lpstrFile )          
			szFileTitle = Cstr( myFileDlg.lpstrFileTitle )
			FileName = Left$(szFileName, Instr(szFileName, Chr$(0)))
			FileTitle = Left$(szFileTitle, Instr(szFileTitle, Chr$(0)))
			FileSaveDlg = 1          
		Else           
			FileSaveDlg = 0
		End If  'If APIResults <> 0 Then                    
		
	End Function  'Function FileSaveDlg()
	
	
	'Methode zum Prüfen ob ein Verzeichnis vorhanden ist
	Function IsValidDir(sPath As String) As Integer
		
		On Error Resume Next
		
		attr% = Getfileattr(sPath)
		If Err > 0 Then
			IsValidDir = 0
			Exit Function
		End If  'If Err > 0 Then
		If (attr% And ATTR_DIRECTORY) Then IsValidDir = 1
		
	End Function  'Function IsValidDir(sPath As String) As Integer
	
	
	'Methode zum Anlegen von Verzeichnissen
	Function MakeDir (sPath As String) As Integer
		
		Dim sNewPath As String
		Dim iPosi As Integer
		
		If Right$(sPath,1) <> "\" Then sPath = sPath & "\"
		MakeDir = 1
		
		On Error Goto MakeDirError
		
		Do
			iPosi = Instr(iPosi + 1, sPath, "\")
			If iPosi > 0 Then
				sNewPath = Left$(sPath, iPosi - 1)
				If Me.IsValidDir(sNewPath) = 1 Then
					Mkdir sNewPath
				End If  'IsValidDir(sNewPath) = 0...
			End If  'iPosi > 0...
		Loop Until iPosi = 0
		
		MakeDir = 0
		
Ende:		
		Exit Function
		
MakeDirError:
		Messagebox "Error " & Str(Err) & " : " & Error$ 
		Resume Ende
		
	End Function 'Function MakeDir (sPath As String) As Integer
	
	
	'Methode zum Kopieren von einer Datei
	'source -> Quelldatei incl. Verzeichnis
	'destination -> Zielverzeichnis ohne Dateinamen
	Function CopyFile(source As String, destination As String) As Integer
		
		On Error Goto Errorhandler
		
		If source = "" Then
			Messagebox "Sie haben keine Quelldatei zum Kopieren angegeben." , MB_ICONEXCLAMATION, "Datei kopieren"
			CopyFile = 1
			Exit Function               
		End If  'If source = ""
		
		If destination = "" Then
			Messagebox "Sie haben keine Ziel zum Kopieren angegeben." , MB_ICONEXCLAMATION, "Datei kopieren"
			CopyFile = 1
			Exit Function               
		End If  'If destination = ""
		
		If Strcompare(source, destination, 5) = 0 Then
			Messagebox "Quelle und Ziel dürfen nicht gleich sein." , MB_ICONEXCLAMATION, "Datei kopieren"
			CopyFile = 1
			Exit Function               
		End If  'If StrCompare...          
		
		If Dir$(source, 0) = "" Then
			Messagebox "Datei " & source & " ist nicht vorhanden" , MB_ICONEXCLAMATION, "Datei kopieren"
			CopyFile = 1
			Exit Function
		End If  'If Dir$(source, 0) = ""
		
		If Dir$( destination , 16) = "" Then 
			If Messagebox ("Verzeichnis " & destination & " ist nicht vorhanden" & Chr$(13) & Chr$(10) &"Möchten Sie das Verzeichnis erstellen?",_
			MB_YESNO + MB_ICONQUESTION, "Datei kopieren" ) = IDYes Then
				If Me.MakeDir(destination) = 1 Then
					Messagebox "Verzeichnis " & destination & " konnte nicht angelegt werden" , MB_ICONEXCLAMATION, "Datei kopieren"
					CopyFile = 1
					Exit Function
				End If   'If Me.MakeDir(destination) = 1 Then                   
			Else
				CopyFile = 1
				Exit Function               
			End If  'If Messagebox ("Verzeichnis " & destination & " ist 
		End If  'If Dir$(destination, 16) = ""
		
		If Right$(destination,1) <> "\" Then destination = destination & "\"
		destination = destination & Me.ExtractFileName(source)
		
		If Dir$(destination, 0) = destination Then
			If Messagebox ("Datei " & destination & " ist bereits vorhanden." & Chr$(13) & Chr$(10) &"Möchten Sie die Datei überschreiben?", _
			MB_YESNO + MB_ICONQUESTION, "Datei kopieren" ) = IDYes Then
				Filecopy source, destination
				Messagebox "Datei " & destination & " wurde erfolgreich kopiert", MB_ICONINFORMATION, "Datei kopieren"
				CopyFile = 0
			End If  'If Messagebox ("Datei existiert bereits. Überschreiben",  ...
		Else
			Filecopy source, destination
			Messagebox "Datei " & destination & " wurde erfolgreich kopiert", MB_ICONINFORMATION, "Datei kopieren"                   
			CopyFile = 0
		End If  'If Dir$(destination...  
		
Ende:     
		Exit Function
		
ErrorHandler:
		If Err = 76 Then
			Resume Next
		Else
			Messagebox "Beim Kopieren ist ein Fehler aufgetreten." & Chr$(13) & Chr$(10) & "Fehlernr.: " & Str$(Err) & " -> " & Error$, _
			MB_ICONSTOP, "Datei kopieren"
			CopyFile = 1
			Resume Ende          
		End If  'If Err = 76 Then
		
	End Function  'Function CopyFile(source As String, destination As String) As Integer	
	
	
	'Methode zum extrahieren des Dateinamens
	Function ExtractFileName( sPath As String) As String
		
		Dim iPos As Integer
		Dim iPosSave As Integer
		
		Do
			iPosi = Instr(iPosi + 1, sPath, "\")
			If iPosi > 0 Then iPosSave = iPosi + 1
		Loop Until iPosi = 0
		ExtractFileName = Mid$(sPath,iPosSave)
		
	End Function  'Function ExtractFileName( sPath As String) As String
	
	
	'Methode zum Extrahieren des Verzeichnisteils
	Function ExtractFilePath(sPath As String) As String
		
		Dim iPos As Integer
		Dim iPosSave As Integer
		
		Do
			iPosi = Instr(iPosi + 1, sPath, "\")
			If iPosi > 0 Then iPosSave = iPosi
		Loop Until iPosi = 0
		ExtractFilePath = Left$(sPath,iPosSave)
		
	End Function  'Function ExtractFilePath(sPath As String) As String
	
End Class  'Class cFile


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz