| |

Fortgeschrittene ProgrammierungEvent für Datei kopieren (2) | |  | Autor: Sheridan | Datum: 04.10.02 08:43 |
| Hi,
Im vorhergehenden Thema habe ich mich vielleicht unklar ausgedrückt.
Das Aufgabenstellung ist folgende:
Wird auf einem Server (unbeaufsichtigt in einem Raum) in ein bestimmtes Verzeichnis eine Datei kopiert (egal ob von einem Benutzer oder einem Programm und das unbeaufsichtigt), so soll ein Programm gestartet werden (Dll), welche diese Daten in eine Datenbank importiert.
Ich habe die API-Funktion ReadDirectoryChanges gefunden und folgendes programmiert. Die Funktion CreateFile und ReadDirectoryChanges wird ohne Fehler ausgeführt, aber es passiert nichst, wenn ich zB über den Explorer eine Datei ins Verzeichnis kopiere.
Programmaufbau:
Formular mit Button Command1
Modul
Falls es jemand ausprobiert will, so muß er/sie den Pfad in der Variable strDatei ausbessern.
In Formular:
Option Explicit
' Fehlermeldung
Private Declare Function GetLastError Lib "kernel32" () As Long
Private Declare Function FormatMessage Lib "kernel32" Alias "FormatMessageA" (ByVal dwFlags As Long, lpSource As Any, ByVal dwMessageId As Long, ByVal dwLanguageId As Long, ByVal lpBuffer As String, ByVal nSize As Long, Arguments As Long) As Long
' Filesystem
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFilename As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const FILE_LIST_DIRECTORY = 1
Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2
Private Const FILE_SHARE_DELETE = &H4
Private Const OPEN_EXISTING = 3
Private Const FILE_FLAG_BACKUP_SEMANTICS = &H2000000
Private Const FILE_NOTIFY_CHANGE_SIZE = &H8
Private Const FORMAT_MESSAGE_FROM_SYSTEM = &H1000
Private m_lngHandle As Long
Private Declare Function ReadDirectoryChanges Lib "kernel32" Alias "ReadDirectoryChangesW" (ByRef hDirectory As Long, ByRef lpBuffer As FILE_NOTIFY_INFORMATION, ByVal nBufferLength As Long, ByRef bWatchSubtree As Long, ByVal dwNotifyFilter As Long, ByRef lpBytesReturned As Long, ByRef lpOverlapped As Long, ByRef lpCompletionRoutine As Long) As Long
Private Sub Command1_Click()
Dim nFehler As Long
Dim strDatei As String
Dim lngFAdr As Long
' Handle schließen
If m_lngHandle <> 0 Then
CloseHandle m_lngHandle
End If
' Ordner öffnen
strDatei = "X:ProjekteMSCONSMSCONS DateienAlleDBZiele"
If m_lngHandle = 0 Then
m_lngHandle = CreateFile( _
strDatei, _
FILE_LIST_DIRECTORY, _
FILE_SHARE_READ Or FILE_SHARE_DELETE, _
-1, _
OPEN_EXISTING, _
FILE_FLAG_BACKUP_SEMANTICS, _
0)
End If
' Ordner Änderung aktivieren
If m_lngHandle <> -1 Then
nFehler = ReadDirectoryChanges( _
m_lngHandle, _
m_ChangeInfo, _
255, _
0, _
FILE_NOTIFY_CHANGE_SIZE, _
255, 0, 0)
Else
nFehler = GetLastError()
Fehler (nFehler)
End If
If nFehler <> 0 Then
nFehler = GetLastError()
Fehler (nFehler)
End If
End Sub
Private Sub Form_Load()
m_lngHandle = 0
End Sub
Private Sub Form_Unload(Cancel As Integer)
CloseHandle m_lngHandle
End Sub
Private Function Test() As Boolean
MsgBox m_ChangeInfo.FileName, , "Änderungen"
End Function
Private Sub Fehler(nFehler)
Dim Buffer As String
Dim Result As Long
Buffer = Space$(256)
Result = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, nFehler, _
0&, Buffer, Len(Buffer), ByVal 0)
MsgBox Trim(Buffer), , "API-Fehler"
End Sub
In Modul:
Public Type FILE_NOTIFY_INFORMATION
NextEntryOffset As Long
Action As Long
FileNameLength As Long
FileName As String * 1
End Type
Public m_ChangeInfo As FILE_NOTIFY_INFORMATION
Public Type OVERLAPPED
Internal As Long
InternalHigh As Long
Offset As Long
OffsetHigh As Long
hEvent As Long
End Type
Public m_nOverlapped
Public Function DirChanged( _
ByVal dwErrorCode As Long, _
ByVal dwNumberOfBytesTransfered As Long, _
ByRef lpOverlapped As OVERLAPPED) As Variant
MsgBox "Änderung"
End Function |  |
 Event für Datei kopieren (2) | 102 | Sheridan | 04.10.02 08:43 |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
sevAniGif (VB/VBA) 
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) Access-Tools Vol.1 
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|