FindFirstFileNotification_() & Co.

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

FindFirstFileNotification_() & Co.

Beitrag 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...
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag 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
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

MVXA hat geschrieben:dass die Funktion mit Universal Kühen arbeitet.
...ich will Kühe?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag 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
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: FindFirstFileNotification_() & Co.

Beitrag von Kiffi »

> Aber welche Datei?

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

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten