Pregunta

Estoy trabajando en una aplicación de Metro que muestra el contenido de una carpeta determinada en un control ListView.MS decidido que los desarrolladores no necesitan el Sistema.IO.Directorio de clase y se quitó completamente desde el marco.

Estoy buscando un reemplazo para enumerar los archivos en C# en una aplicación estilo metro.He comprobado todos los enumeración de muestras suministradas por la MS y todos ellos parecen sólo enumerar las Bibliotecas de Windows utilizando el KnownFolders clase, algo como:

StorageFolder picturesFolder = KnownFolders.PicturesLibrary;

y llamando a la GetFilesAsync() o GetFoldersAsync() métodos, dependiendo de sus necesidades.Todos estos son de oro si quisiera enumerar sólo en el interior de las imágenes o de la biblioteca de música.Sin embargo, yo estoy mirando para enumerar los archivos en los directorios que no están incluidos en una biblioteca.

Alguien sabe cómo es esto posible en WinRT???

¿Fue útil?

Solución

Por diseño, usted está extremadamente limitado en esta área para las aplicaciones de Metro.La idea es que una aplicación de Metro solo tenga acceso a aquellas cosas a las que se confía, por lo que puedes:

  1. acceder al almacenamiento local, específico para su aplicación
  2. acceder a un puñado de ubicaciones de almacenamiento conocidas, o
  3. acceder a una ubicación específicamente otorgada.

Echa un vistazo a http://msdn.microsoft.com/en-us/library/windows/apps/hh464959.aspx para tener una idea de a qué podrá acceder.

Otros consejos

De http://tirania.org/blog/archive/2011/Sep-15.html :

Cuando se utiliza C# y VB, usted está usando plenamente .NET framework.Pero ellos han elegido para exponer un subconjunto más pequeño de la API para los desarrolladores empuje la nueva visión de Windows 8.

Y esta nueva visión incluye seguridad/espacio aislado de los sistemas y asincrónica de programación.Esta es la razón por la que usted no obtener acceso al sistema de archivos o el acceso del socket y por qué sincrónico de la Api que se utiliza para consumir no están expuestas.

Ahora, note que dije "expuestos" y no "desaparece".

Lo que hice fue que ellos sólo se ven expuestos al compilador de un conjunto de APIs cuando el destino del Metro de perfil.Por lo que su aplicación no accidentalmente el Archivo de la llamada.Crear, por ejemplo.En tiempo de ejecución, sin embargo, el CLR se cargará el total de la biblioteca de clases, el mismo que contiene Archivo.Crear, por lo que internamente, el CLR podría llamar algo así como Archivo.Crear, es sólo que no tienen acceso a ella.

Esta división es similar a lo que se ha hecho en el pasado con Silverlight, donde no todas las API fue expuesto, y donde mscorlib fue derecho, dado que su aplicación no tiene que asegurarse de que el sistema de seguridad.

Usted puede pensar que usted puede utilizar algún truco (en referencia a la GAC biblioteca en lugar de que el compilador de referencia o el uso de la reflexión para llegar privado APIs, o P/Invocar en Win32).Pero todos estos usos se ser atrapado por el AppStore de solicitud de revisión y usted no será capaz de publicar tu aplicación a través de Microsoft store.

Usted todavía puede hacer lo feo hack usted por favor en su sistema.Sólo no será posible publicar que a través de la AppStore.

Así que probablemente no existe de manera oficial, y si hay una forma no oficial, que probablemente no va a ser aceptada en la app store.

Simplemente, en general, esto tiene sentido:No quiero descargar un aparentemente legítimo de aplicación sólo para tener que escanear el disco duro y encontrar mi "budget.xls" hoja de cálculo que incluye mi banca/información de crédito.

EDITAR:es posible conceder el acceso temporal para asegurar que los archivos/carpetas a través de WinRT del selector de archivos, pero tiene que ser invocada y elegido explícitamente por el usuario.

Puedes usar el StorageFolder.GetFolderFromPathAsync Método para obtener un Carpeta de almacenamiento instancia de un camino.

StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(@"C:\...");

Tenga en cuenta que es posible que no tenga permiso para hacer esto en todas las rutas de su máquina.

Situación similar.Quería acceder al archivo de marcadores de Chrome para analizarlo.Tuve que usar FileOpenPicker inicialmente, pero el archivo que devuelve se puede "almacenar en caché" en la lista de acceso futuro (?) para su posterior recuperación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top