¿Ejemplo de FileObserver de Android en Xamarin / C #?

Necesito orientación para crear un observador de archivos en Xamarin c # (Android)

¡Algún tipo de ejemplo práctico sería maravilloso!

He intentado convertir los de Java en C #, pero debido a mi falta de experiencia en el entorno de C #, se producen demasiados errores al comstackrse … y obtener el código de referencia de escritura en C # vs java está resultando irritante.

Así que, ¡POR FAVOR!, Que alguien me señale algún tipo de trabajo

Este es un ejemplo java de un observador de archivos https://gist.github.com/shirou/659180

Cree una clase que herede de Android.OS.FileObserver , solo necesita implementar los constructores OnEvent() y uno (+). Es un patrón realmente simple después de que lo veas una vez … 😉

Notas:

  • Observe en una ruta , si necesita filtrar por archivo, hágalo en OnEvent
  • No permita que su objeto FileObserver obtenga GC o sus OnEvents se detendrán mágicamente: – /
  • Recuerde llamar a StartWatching () para recibir llamadas de OnEvent

Clase FileObserver:

 using System; using Android.OS; using Android.Util; namespace MyFileObserver { public class MyPathObserver : Android.OS.FileObserver { static FileObserverEvents _Events = (FileObserverEvents.AllEvents); const string tag = "StackoverFlow"; public MyPathObserver (String rootPath) : base(rootPath, _Events) { Log.Info(tag, String.Format("Watching : {0}", rootPath)); } public MyPathObserver (String rootPath, FileObserverEvents events) : base(rootPath, events) { Log.Info(tag, String.Format("Watching : {0} : {1}", rootPath, events)); } public override void OnEvent(FileObserverEvents e, String path) { Log.Info(tag, String.Format("{0}:{1}",path, e)); } } } 

Ejemplo de uso:

 var pathToWatch = System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal); // Do not let myFileObserver get GC'd, stash it's ref in an activty, or ... myFileObserver = new MyPathObserver (pathToWatch); myFileObserver.StartWatching (); // and StopWatching () when you are done... var document = Path.Combine(pathToWatch, "StackOverFlow.txt"); button.Click += delegate { if (File.Exists (document)) { button.Text = "Delete File"; File.Delete (document); } else { button.Text = "Create File"; File.WriteAllText (document, "Foobar"); } }; 

salida de logcat de adb (al hacer clic en el botón de prueba):

 I/StackoverFlow( 3596): StackOverFlow.txt:Create I/StackoverFlow( 3596): StackOverFlow.txt:Open I/StackoverFlow( 3596): StackOverFlow.txt:Modify I/StackoverFlow( 3596): StackOverFlow.txt:CloseWrite I/StackoverFlow( 3596): StackOverFlow.txt:Delete I/StackoverFlow( 3596): StackOverFlow.txt:Create I/StackoverFlow( 3596): StackOverFlow.txt:Open I/StackoverFlow( 3596): StackOverFlow.txt:Modify I/StackoverFlow( 3596): StackOverFlow.txt:CloseWrite I/StackoverFlow( 3596): StackOverFlow.txt:Delete I/StackoverFlow( 3596): StackOverFlow.txt:Create I/StackoverFlow( 3596): StackOverFlow.txt:Open I/StackoverFlow( 3596): StackOverFlow.txt:Modify I/StackoverFlow( 3596): StackOverFlow.txt:CloseWrite