Polling im Verzeichniss / auf Dateien warten
-
Guten Abend,
Ich habe den unten aufgeführten Code bisher zum Polling in einem Verzeichniss benutzt leider funktioniert dieser laut http://support.microsoft.com/kb/140062/de bei netzwerkeinbindungen sehr schlecht. Freund google spuckt nur sehr spärlich informationen über Polling aus.
string sFileName; string sKompletterPfad; int iret=-1; bool isNotOK = true; sDatei Datei; WIN32_FIND_DATA findData; string dir(Verzeichniss); Reinit: HANDLE hFind=FindFirstFile((dir+"*").c_str(), &findData); if(INVALID_HANDLE_VALUE==hFind) {fehlernummer = -2;exit(-2);} do { Datei.Kill(); FindNextFile(hFind,&findData); /* ReInitalisierung für Polling */ if(0==sFileName.compare(findData.cFileName)) { Sleep(1000); goto Reinit; //ja ist nicht ganz ok // der Text oben und coninue wäre besser } sFileName =findData.cFileName; if(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) isNotOK = true; else isNotOK = false; }while(isNotOK);
Ich bin Offen für Kritik und Ideen um ein sicheres Verzeichnisspolling umzusetzen
Danke Fisch
-
Wie wäre es mit damit?
-
Falschen link erwischt, hier ist der richtige
-
leider nicht für windows xp
-
Danke
-
hat mir aber trozdem nicht geholfen
pollt hier keiner oder wie ???
-
C++ kennt keine Verzeichnisse, deswegen wird auch keiner soetwas hier pollen.
Welches OS (WIndows) , Compiler und lib ?
-
toll wäre eine ANSI konforme lösung
wenns absolut nicht geht VS 8 und wie oben genannt M$XP
-
MFC .Net oder reine WinAPI ....
-
WinAPI
-
du hast doch schon einen link auf die winapi funktion bekommen. was willst du noch?
-
....
Schau dir bitte den Code an, danach schau den Link an, den lolz gesetzt hat dann schau dir meinen link an. Nach der Prozdedur müstet du gemerkt haben das das Hauptproblem bei Netzwerknamen leigt und nicht bei der Neuinitalisierung bei FindFirstFile Was übrigens ja eine WIN API Funktion ist (vom gleichen Stamm wie Die Funktion von Lolz). Es gibt micht sicherheit eine möglichkeit dies mit ANSI standart zu implementiern und einer von euch ist da drausen der das weis.
Danke
-
Mag sein, dass es irgendeinen ANSI Standard gibt, der den Dateizugriff regelt und dass es auch irgendeine C++-Bibliothek (für Windows) gibt die diesen Standard umsetzt. Aber egal wie gehört die Frage niht in das C++ Forum..
Bei FindFirstChangeNotification wird doch gar kein FindFirstFile verwendet
Was für ein Problem hast du denn bei dem angeben von einem Netzwerknamen? Gib uns die Informationen doch einfach und lass sie uns nicht raten.
-
Dieser Fehler bezieht sich übrigens auf NT4.0, ich dachte du hast XP?
-
ich bekomme nach der ersten Reinit ein falsches Handle zurück. Die freigegebene Netzresource liegt auf einer AS400. FindFirstChangeNotification leifert mir nun true zurück falls die veränderung eingetreten ist. So wie ich es verstehe, hab ich nun die möglichkeit das Reinit nach dem Event true abzuarbeiten. Dies ändert aber nichts an dem eingendlichen Invalid Handle Problem.
nun bin ich offen für ein anderes polling, das meinetwegen winAPI .Net oder QT vorraussetzt. Inzwischen habe ich beispielsweise Die "SearchPath" Funktion gefunden, die aber leider auch nicht klappt. Mein wunsch wäre jetzt ein eine Pollingfunktion, die jemand schon einmal implementiert hat . Egal ob winAPI oder .NET
-
Du kannst mal schauen ob Dich System::IO::FileSystemWatcher weiter bringt.
Mit FileSystemWatcher können Sie die Änderungen in einem angegebenen Verzeichnis überwachen lassen. Änderungen in Dateien und Unterverzeichnissen des angegebenen Verzeichnisses können überwacht werden. Sie können eine Komponente zum Überwachen von Dateien auf einem lokalen Computer, einem Netzlaufwerk oder einem Remotecomputer erstellen.
-
sorry für die Formatierung mit FindFirstChangeNotification hätte ich es jetzt so gemacht ...
do { FindNextFile(hFind,&findData); /* ReInitalisierung für Polling */ if(0==sFileName.compare(findData.cFileName)) { dwWaitStatus=WaitForSingleObject(dwChangeHandle,INFINITE); FindNextFile(hFind,&findData); } sFileName =findData.cFileName; if(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) isNotOK = true; else isNotOK = false; }while(isNotOK);
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Und hats damit funktioniert ?
-
Ich glaube das was er sucht ist dies hier:
http://%/&/(&)§%"!.!§%§!Und da unter "Polling".
mfg Krümel