visual una studio sistema que préstamo programa para libros librerias libreria hacer como comentario clases biblioteca c# xamarin.android xamarin portable-class-library compact-framework2.0

studio - programa para el préstamo de libros en una biblioteca c#



¿Qué necesito hacer para que este código funcione en una Biblioteca de clases portátil? (4)

Las aplicaciones de Windows Phone no usan el sistema de archivos del sistema operativo y están restringidas a usar almacenamiento aislado para persistir y acceder a los archivos, por lo que este espacio de nombres no proporciona ninguna funcionalidad adicional.

http://msdn.microsoft.com/en-us/library/windowsphone/develop/system.io%28v=vs.105%29.aspx

Me pregunto si Portable Class Library tiene una funcionalidad aún más restringida que Compact Framework.

Estoy tratando de portar una aplicación CF / Windows CE (se ejecuta en un dispositivo de mano) a una solución Xamarin que se destinará a Android, iOS, Windows Phone y tal vez otras cosas.

Uno de los problemas que encuentro, sin embargo, es que este código heredado (que funciona bajo CF):

public static List<string> GetXMLFiles(string fileType, string startingDir) { const string EXTENSION = ".XML"; string dirName = startingDir; // call it like so: GetXMLFiles("ABC", "//"); <= I think the double-whack is what I need for Windows CE device...am I right? var fileNames = new List<String>(); try { foreach (string f in Directory.GetFiles(dirName)) { string extension = Path.GetExtension(f); if (extension != null) { string ext = extension.ToUpper(); string fileNameOnly = Path.GetFileNameWithoutExtension(f); if (fileNameOnly != null && ((ext.Equals(EXTENSION, StringComparison.OrdinalIgnoreCase)) && (fileNameOnly.Contains(fileType)))) { fileNames.Add(f); } } } foreach (string d in Directory.GetDirectories(dirName)) { fileNames.AddRange(GetXMLFiles(fileType, d)); // from Brad Rem''s answer here: http://stackoverflow.com/questions/22186198/why-is-this-function-returning-nothing-although-there-is-a-match/22186351?noredirect=1#22186351 } } catch (Exception ex) { MessageBox.Show(ex.Message); } return fileNames; }

... no se compilará en la solución Xamarin / CPL. Me aparece: "El nombre ''Directorio'' no existe en el contexto actual" y al hacer clic con el botón derecho en esa palabra no se obtiene la opción "resolver".

¿Hay alguna manera de que PCL reconozca "Directorio" o debo reescribir completamente el código? Si este último, ¿alguien tiene alguna sugerencia sobre qué hacer / usar en su lugar?

Relacionado, ¿hay una URL que me muestre qué [no] está disponible en PCL y / o un sitio que mostrará qué parte de un bloque de código proporcionado está "listo para PCL"?

ACTUALIZAR

La primera imagen en este artículo es muy esclarecedora. Más adelante, específicamente habla de que "Directorio" no está disponible en el escenario PCL.

ACTUALIZACIÓN 2

Descargué el paquete PCLStorage al que hace referencia Daniel Plaisted a continuación para permitirme acceder al sistema de archivos dentro de un proyecto PCL.

Usando el código de muestra al comienzo de la página de descarga [http://pclstorage.codeplex.com/] como punto de partida, he llegado hasta aquí:

public async Task<List<string>> GetXMLFiles(string fileType, string startingDir) { const string EXTENSION = ".XML"; IFolder rootFolder = FileSystem.Current.LocalStorage; IFolder folder = await rootFolder.GetFolderAsync(startingDir, CreationCollisionOption.OpenIfExists); //CreateFolderAsync(startingDir, CreationCollisionOption.OpenIfExists); List<string> fileNames = await folder.GetFilesAsync(EXTENSION); return fileNames; }

... pero "EXTENSIÓN" como arg a GetFilesAsync () no es correcto. Me sale con esto, " Argumento 1: no se puede convertir de ''cadena'' a ''System.Threading.CancellationToken'' "

Entonces, ¿qué necesito hacer para obtener todos los archivos * .XML de la carpeta?

ACTUALIZACIÓN 3

Esto compila, pero no estoy del todo seguro de que sea la manera correcta de hacerlo, además del hecho de que simplemente obtiene todos los archivos de la carpeta, en lugar de solo aquellos que coinciden con "* .XML":

public async Task<List<IFile>> GetXMLFiles(string fileType, string startingDir) { const string EXTENSION = ".XML"; IFolder rootFolder = FileSystem.Current.LocalStorage; IFolder folder = await rootFolder.GetFolderAsync(startingDir, System.Threading.CancellationToken.None); IList<PCLStorage.IFile> fileNames = await folder.GetFilesAsync(System.Threading.CancellationToken.None); return fileNames.ToList(); }


Como en una PCL no pude obtener un StreamWriter de una cadena (requería una transmisión), creé una interfaz simple para obtener algunos datos de la implementación de la plataforma. También puede hacer esto con DirectoryInfo y FileInfo.

https://github.com/sami1971/SimplyMobile/blob/master/Core/SimplyMobile.Text/IStreamLocator.cs

La implementación es realmente simple también, solo necesita un solo indicador de compilación para WP8:

https://github.com/sami1971/SimplyMobile/blob/master/WP8/SimplyMobile.Text.Platform/StreamLocator.cs

Búsqueda recursiva de archivos * .XML:

private static void PrintDirectory(IStreamLocator locator, string dir) { foreach (var file in locator.GetFileNames(dir, "*.XML")) { System.Diagnostics.Debug.WriteLine(file); } foreach (var di in locator.GetFolderNames(dir, "*")) { PrintDirectory(locator, di); } }


Otra opción es usar Shim si todas sus plataformas son compatibles con ella.

La cobertura de API para operaciones de archivos no es exhaustiva, pero te lleva un largo camino. Como beneficio adicional, también te da acceso a un montón de otras cosas.