vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Event 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
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Event für Datei kopieren (2)102Sheridan04.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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel