Seite 1 von 1

FindFirstFileNotification_() & Co.

Verfasst: 17.09.2006 00:29
von AND51
Hallo!

Code: Alles auswählen

path$="C:\"

handle=FindFirstChangeNotification_(@path$, 0, #FILE_NOTIFY_CHANGE_SIZE|#FILE_NOTIFY_CHANGE_LAST_WRITE)

FindNextChangeNotification_(handle)

WaitForSingleObject_(handle, #INFINITE)

Debug "Änderung"

FindCloseChangeNotification_(handle)
Das habe ich mal zusammengebastelt. Lauert darauf, dass irgendeine Datei in C:\ (ohne Unterordner) geändert wird.
Aber welche Datei? Das will ich wissen. Wie komme ich an die Datei ran? Bitte schickt mich nicht den Umweg, die Verzeichnisinhalte per ExamineDirectory() selbst zu überwachen :(
Vor allem, wenn ich auch mal Unterordner überwachen will, dauert's ganz schön lange...

Verfasst: 17.09.2006 04:34
von MVXA
Kenn mich da nicht wirklich aus aber MSDN, was du auch nutzen könntest,
hat mir sowas hier ausgespuckt. Das W am Ende deutet aber darauf hin,
dass die Funktion mit Universal Kühen arbeitet.

http://msdn.microsoft.com/library/defau ... angesw.asp

Verfasst: 17.09.2006 04:35
von Kaeru Gaman
MVXA hat geschrieben:dass die Funktion mit Universal Kühen arbeitet.
...ich will Kühe?

Verfasst: 17.09.2006 04:42
von MVXA
Das ist meine Bezeichnung für Unicode :lol:. Ist ne lustige Geschichte.
Um unter Windows98 Programme mit Unicode nutzen zu können, gab
oder eher gibt es immer noch(...) eine DLL namens UniCows.dll . Da
ich aber Unicode nicht besonders mag (2 Bytes für ein Zeichen, was
für ein müll...) nenn ich es lieber abwertend Universal Kühe

Verfasst: 17.09.2006 04:58
von Kaeru Gaman
ahja...

..und ich hab schon befürchtet, das hätte was mit der zeitangabe "wenn Kühe fliegen können" zu tun....

Re: FindFirstFileNotification_() & Co.

Verfasst: 17.09.2006 10:14
von Kiffi
> Aber welche Datei?

http://www.purebasic.fr/english/viewtop ... rkie#87048

Grüße ... Kiffi

Verfasst: 17.09.2006 15:01
von AND51
@ MXVA: Danke, das habe ich schon gesehen!
@ Kiffi: Deinen Link habe ich auch schon gesehen! Funktioniert auch bei mir. Aber mit Unicode kenne´ich mich noch nicht richtig aus, außerdem läuft der Code nicht unter Windows 9x/ME oder niedriger.

Da habe ich mich bereits gestern hingesetzt und nen Code geschrieben, der die ganze Festplatte scannt, und alle Dateinamen und Ordnernamen un eine Linkedlist schreibt, braucht lt. Taskmanager nur ca. 7 MB RAM. Der Scan geht eiegntlich ganz schnell: 5 Sekunden. Ist das denn real? Würde es sich lohnen, bei Änderung mittels obigem Code die LinkedList zu durchlaufen?

Hier mein Code. Um den unter 4.00 zum Laufen zu bringen, bitte die LinkedList Global machen, UseDirectory() durch FinishDirectory() und NextDirectory() durch [...?...] ersetzen.

Code: Alles auswählen

NewList datei.s()

Procedure scan(pfad.s)
	Protected dir, type
	dir=ExamineDirectory(#PB_Any, pfad, "")
	If dir
		UseDirectory(dir)
		type=NextDirectoryEntry()
		While type
			If DirectoryEntryName() <> ".." And DirectoryEntryName() <> "."
				AddElement(datei())
				If type = 1
					datei()=pfad+DirectoryEntryName()
				Else
					datei()=pfad+DirectoryEntryName()+"\"
					scan(datei())
					UseDirectory(dir)
				EndIf
			EndIf
			type=NextDirectoryEntry()
		Wend
	EndIf
EndProcedure

start=ElapsedMilliseconds()
scan("C:\")
Debug ElapsedMilliseconds()-start