Pergunta

Estou trabalhando em um aplicativo Metro que mostra o conteúdo de uma determinada pasta em um controle ListView.A MS decidiu que os desenvolvedores não precisam da classe System.IO.Directory e a removeu totalmente da estrutura.

Estou procurando um substituto para enumerar arquivos em C# em um aplicativo estilo metro.Eu verifiquei todos os exemplos de enumeração fornecidos pela MS e todos parecem enumerar apenas as bibliotecas do Windows usando o KnownFolders classe, algo como:

StorageFolder picturesFolder = KnownFolders.PicturesLibrary;

e ligando para o GetFilesAsync() ou GetFoldersAsync() métodos dependendo de suas necessidades.Tudo isso é ouro se eu quisesse enumerar apenas dentro das fotos ou da biblioteca de música.No entanto, pretendo enumerar arquivos em diretórios que não estão incluídos em uma biblioteca.

Alguém sabe como isso é possível no WinRT???

Foi útil?

Solução

Você é, por definição, extremamente limitado nesta área para aplicativos Metro.A ideia é que um aplicativo Metro tenha acesso apenas às coisas que são confiáveis ​​para acessar, então você pode:

  1. acessar armazenamento local, específico para sua aplicação
  2. acessar vários locais de armazenamento conhecidos ou
  3. acessar um local especificamente concedido.

Dê uma olhada http://msdn.microsoft.com/en-us/library/windows/apps/hh464959.aspx para ter uma ideia do que você poderá acessar.

Outras dicas

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

Ao usar C# e VB, você está usando a estrutura .NET completa.Mas eles optaram por expor um subconjunto menor da API aos desenvolvedores para empurrar a nova visão do Windows 8.

E essa nova visão inclui sistemas de segurança/caixa de areia e programação assíncrona.É por isso que você não obtém acesso direto ao sistema de arquivos ou acesso ao soquete e por que as APIs síncronas que você estava acostumado a consumir não estão expostas.

Agora, você percebe que eu disse “exposto” e não “desaparecido”.

O que eles fizeram foi apenas expor ao compilador um conjunto de APIs quando você segmenta o perfil Metro.Portanto, sua aplicação não acidentalmente chamar File.Create por exemplo.No tempo de execução, porém, o CLR carregará a biblioteca de classes completa, a mesma que contém File.Create, portanto, internamente, o CLR poderia chamar algo como File.Create, é só você que não terá acesso a ele.

Essa divisão é semelhante ao que foi feito no passado com o Silverlight, onde nem toda API foi exposta e onde o MSCORLIB recebeu direitos de que seu aplicativo não precisava garantir a segurança do sistema.

Você pode estar pensando que pode usar algum truque (referenciando a biblioteca GAC ​​em vez da referência do compilador ou usando a reflexão para obter APIs privadas ou P/Invocando no Win32).Mas todos esses usos serão ser pego pelo aplicativo de revisão AppStore e você não será capaz de publicar seu aplicativo na loja da Microsoft.

Você ainda pode fazer qualquer hack feio que desejar em seu sistema.Não será possível publicar isso através da AppStore.

Portanto, provavelmente não existe uma forma oficial e, se houver uma forma não oficial, provavelmente não será aceita na app store.

Em geral, isso faz sentido:Não quero baixar um aplicativo aparentemente legítimo apenas para que ele escaneie meu disco rígido e encontre minha planilha "budget.xls", que inclui minhas informações bancárias/de crédito.

EDITAR:é possível conceder acesso temporário a arquivos/pastas seguros por meio do seletor de arquivos do WinRT, mas deve ser invocado e escolhido explicitamente pelo usuário.

Você pode usar o StorageFolder.GetFolderFromPathAsync Método para obter um Pasta de armazenamento instância de um caminho.

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

Observe que você pode não ter permissão para fazer isso para todos os caminhos da sua máquina.

Situação similar.Queria acessar o arquivo de favoritos do Chrome para analisar.Tive que usar o FileOpenPicker inicialmente, mas o arquivo retornado pode ser "armazenado em cache" no futureaccesslist(?) para recuperação posterior.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top