Jaki jest najlepszy sposób na odsłuchanie folderu lub pliku, aby sprawdzić, czy został on zapisany lub czy został dodany nowy plik?Obserwuj plik lub folder w celu C
Odpowiedz
Interfejs API programu FSEvents jest idealny, jeśli po prostu chcesz oglądać katalogi, ale nie obsługuje on monitorowania pojedynczych plików. Stu Connolly ma wielką Objective-C otoki dla FSEvents C API, który nazywa SCEvents i można go pobrać tutaj:
http://stuconnolly.com/blog/scevents-011/
Zaletą FSEvents jest to, że po prostu trzeba obejrzeć jeden folder i ty zostanie powiadomiony o wszelkich zmianach, które wystąpią w dowolnym miejscu w hierarchii podfolderów tego folderu.
Jeśli potrzebujesz powiadomień na poziomie pliku, będziesz musiał użyć kqueues. Uli Kusterer ma wielką celu C opakowanie:
http://zathras.de/angelweb/sourcecode.htm#UKKQueue
Każda z tych metod nie jest o wiele łatwiejsze niż spory zc API bezpośrednio, które nie są zbyt dobrze udokumentowane i nieco rozwarty.
Jeśli potrzebujesz wsparcia dla Tigera, musisz użyć kqueues, ponieważ interfejs API FSEvents nie był oficjalnie dostępny w wersji 10.4.
Nie wiem, jaki jest najlepszy sposób, ale sposobem na wyzwolenie NSThread, który regularnie (na przykład co drugi) sprawdzałby daty utworzenia plików w katalogu, a następnie miał delegata powiązanego z tym wątkiem aby wykonać pewne działania, gdy nowy plik został dodany
To jest głosowanie i jest odradzane. Zamiast tego używaj FSEvents lub kingsów, które są specjalnie zaprojektowane do tego celu. –
Poling jest odradzany, ale jest to również jedyna niezawodna technika. Poling będzie działał * cały * czas, nawet ponad woluminami sieciowymi, gdy plik jest modyfikowany przez inne urządzenie. Każdy powinien przynajmniej rozważyć skorzystanie z niego. –
"tylko niezawodna technika" do opracowania? Słuchanie centralnych wydarzeń wydaje się lepszym wyborem. Bateria mądra. – eonist
Jeśli zmieniasz plik lub folder, wierzę Spotlight wyszukiwarka zaktualizuje swoją bazę danych, aby odzwierciedlić zmiany.
Możesz skonfigurować wątek, który będzie monitorował powiadomienia o numerach kMDQueryDidUpdateNotification przez specyfikację Spotlight query dla tego pliku lub folderu.
Po otrzymaniu tych powiadomień można zwolnić selektor, który robi co tylko chce.
To jest dobry pomysł, ale problem ze Spotlight polega na tym, że nie wszystkie woluminy go obsługują (w szczególności wiele woluminów sieciowych), a użytkownicy mają zwyczaj wyłączania go. –
To są dobre punkty. Po prostu głośno myślę. –
Również możesz mieć woluminy w trybie prywatnym w świetle reflektorów. Miło mieć pomysł na stole. Kciuki w górę! – eonist
Jeśli potrzebujesz użyć kqueue (jak omówiono w innych odpowiedziach), Google Toolbox dla Maca ma nice Objective-C wrapper, z którego korzystałem dotychczas bez żadnych problemów.
Otoczka KernelQueues w obj-c: https://gist.github.com/nielsbot/5155671 – eonist
- 1. Utwórz wielostronicowy plik PDF w celu c
- 2. Maven: dodaj folder lub plik jar do bieżącej ścieżki klasy
- 3. C# Folder Sync biblioteka
- 4. Sprawdź, czy nazwa pliku jest folder lub plik
- 5. plik lub folder o nazwie już istnieje Visual Studio
- 6. Kod Visual Studio zawsze ponownie otwiera poprzedni plik lub folder
- 7. dodać lub skopiować folder w Döcker
- 8. utworzyć folder programowo w Xcode - Cel C
- 9. Jak utworzyć plik w java (nie folder)?
- 10. Obserwuj nowe powiadomienia systemowe OSX
- 11. $ Nie obserwuj przy zmianie danych
- 12. Skompiluj C# do celu-C
- 13. Zapisz plik na MyDocuments + App Folder
- 14. Obserwuj obiekt PropertyChanged na elementach w kolekcji
- 15. IDE dla celu C
- 16. Jak skopiować plik z jednego katalogu do innego katalogu, tworząc folder, jeśli ten folder nie istnieje
- 17. Oszacowanie typu celu C
- 18. Perl readdir w celu
- 19. Macierz bajtów w celu-c
- 20. Łączenie NSStrings w celu C
- 21. Składnia metody w celu-c
- 22. statyczna tablica w celu C
- 23. Testowanie pustą w celu C
- 24. Parsowanie HTML w celu C
- 25. Utwórz plik/folder ukryty w systemie Windows za pomocą Java
- 26. Plik JAR jest wyświetlany jako folder
- 27. Implementacja "Open Containing Folder" i podświetl plik
- 28. Deweloperzy C# do Celu C?
- 29. Znajdź folder Windows programowo w C#
- 30. Jak zdobyć folder% AppData% w C?
Rzeczy się zmieniły od czasu Mac OS 10.7 Lion.Program FSEvents obsługuje teraz szczegółowość na poziomie plików, podczas tworzenia strumienia zdarzeń można użyć flagi kFSEventStreamCreateFlagFileEvents, aby uzyskać informacje o zmianach w poszczególnych plikach. Przewodnik FSEvent nie odzwierciedla tych zmian, ale [Odnośnik] (http://developer.apple.com/library/mac/#documentation/Darwin/Reference/FSEvents_Ref/Reference/reference.html#//apple_ref/c/econst/kFSEventStreamCreateFlagFileEvents). –
Co powiesz na ograniczenia piaskownicy? Czy można otrzymywać powiadomienia o dowolnej ścieżce w systemie? (Po wybraniu przez użytkownika w specjalnym oknie dialogowym) – Vojto
Dobre pytanie. Wierzę, że jeśli wybrałeś folder za pomocą 'NSOpenPanel' (tj. Powerbox), powinieneś być w stanie obserwować go dla zmian bez żadnych problemów. –