Compartilhar via


Como: Localizar arquivos existentes e diretórios em armazenamento isolado

Você também pode procurar por arquivos e pastas existentes usando um arquivo de armazenamento isolado.Lembre-se que em um armazenamento, nomes de arquivos e diretórios são especificados com relação à raiz do sistema de arquivos virtual.Além disso, nomes de arquivos e diretórios nos sistemas de arquivos do Windows não diferenciam maiúsculas de minúsculas.

Para procurar um diretório, use o método de instância GetDirectoryNames de IsolatedStorageFile.GetDirectoryNames leva uma sequência de caracteres que representa um padrão de pesquisa.Há suporte tanto para caracteres curinga de um único caractere (?) quanto de vários caracteres (*).Esses caracteres curinga não podem aparecer na parte do caminho do nome; ou seja, directory1/*ect* é uma sequência de caracteres de pesquisa válida, mas *ect*/directory2 não é.

Para procurar um arquivo, use o método de instância GetFileNames do IsolatedStorageFile .A mesma restrição para caracteres curinga em sequências de caracteres de pesquisa que se aplica a GetDirectoryNames também se aplica a GetFileNames.

Nem GetDirectoryNames nem GetFileNames é recursivo; ou seja, IsolatedStorageFile não fornece métodos para listar todos os diretórios ou arquivos no seu armazenamento.No entanto, exemplos de métodos recursivos são parte do código abaixo.Observe também que ambos GetDirectoryNames e GetFileNames retornam somente o nome da pasta ou do arquivo do item encontrado.Por exemplo, se houver uma correspondência no diretório RootDir/SubDir/SubSubDir, SubSubDir será retornado na matriz de resultados.

Exemplo de FindingExistingFilesAndDirectories

O exemplo de código a seguir ilustra como criar arquivos e pastas em um armazenamento isolado.Primeiro, um armazenamento isolado para usuário, domínio e assembly é recuperado e colocado na variável isoStore.O método CreateDirectory é usado para configurar algumas pastas diferentes e o método IsolatedStorageFileStream cria alguns arquivos nesses diretórios.O código, entãoo, faz um loop através dos resultados do método GetAllDirectories.Este método usa GetDirectoryNames para localizar todos os nomes de diretórios no diretório atual.Esses nomes são armazenados em uma matriz e, em seguida, GetAllDirectories chama a si mesmo, passando em cada um dos diretórios que encontrou.O resultado é todos os nomes de diretório retornados em uma matriz.Em seguida, o código chama o método GetAllFiles.Este método chama GetAllDirectories para saber os nomes de todos os diretórios e, em seguida, procura por aqruivos em cada um desses diretórios usando o método GetFileNames .O resultado é retornado em uma matriz para exibição.

Imports System
Imports System.IO
Imports System.IO.IsolatedStorage
Imports System.Collections

Public Module modmain
   ' These arrayLists hold the directory and file names as they are found.

   Dim directoryList As New ArrayList()
   Dim fileList As New ArrayList()

   ' Retrieves an array of all directories in the store, and 
   ' displays the results.

   Sub Main()

      ' This part of the code sets up a few directories and files in the
      ' store.

      Dim isoStore As IsolatedStorageFile
      isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User Or IsolatedStorageScope.Assembly Or IsolatedStorageScope.Domain, Nothing, Nothing)

      isoStore.CreateDirectory("TopLevelDirectory")
      isoStore.CreateDirectory("TopLevelDirectory/SecondLevel")
      isoStore.CreateDirectory("AnotherTopLevelDirectory/InsideDirectory")

      Dim aStream As New IsolatedStorageFileStream("InTheRoot.txt", FileMode.Create, isoStore)
      Dim bStream As New IsolatedStorageFileStream("AnotherTopLevelDirectory/InsideDirectory/HereIAm.txt", FileMode.Create, isoStore)
      ' End of setup.

      Console.WriteLine()
      Console.WriteLine("Here is a list of all directories in this isolated store:")

      Call GetAllDirectories("*", isoStore)

      Dim directory As String
      For Each directory In directoryList
         console.WriteLine(directory)
      Next

      Console.WriteLine()
      Console.WriteLine("Retrieve all the files in the directory by calling the GetFiles method.")
      Dim file As String

      Call GetAllFiles(isoStore)
      For Each file In fileList
         Console.WriteLine(file)
      Next

   End Sub

   Sub GetAllDirectories(ByVal pattern As String, ByVal storeFile As IsolatedStorageFile)

      ' Retrieve directories.

      Dim directories As String()
      directories = storeFile.GetDirectoryNames(pattern)
      Dim directory As String

      For Each directory In directories

         ' Add the directory to the final list.

         directoryList.Add((pattern.TrimEnd(CChar("*"))) + directory + "/")

         ' Call the method again using directory.

         GetAllDirectories((pattern.TrimEnd(CChar("*")) + directory + "/"), storeFile)

      Next

   End Sub

   Sub GetAllFiles(ByVal storefile As IsolatedStorageFile)

      ' This adds the root to the directory list.

      directoryList.Add("*")

      Dim directory As String

      For Each directory In directoryList

         Dim files As String()
         files = storefile.GetFileNames(directory + "*")
         Dim File As String

         For Each File In files
            fileList.Add(File)
         Next

      Next

   End Sub
End Module
using System;
using System.IO;
using System.IO.IsolatedStorage;
using System.Collections;

public class FindingExistingFilesAndDirectories{

   // Retrieves an array of all directories in the store, and 
   // displays the results.

   public static void Main(){

      // This part of the code sets up a few directories and files in the
      // store.
      IsolatedStorageFile isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);
      isoStore.CreateDirectory("TopLevelDirectory");
      isoStore.CreateDirectory("TopLevelDirectory/SecondLevel");
      isoStore.CreateDirectory("AnotherTopLevelDirectory/InsideDirectory");
      new IsolatedStorageFileStream("InTheRoot.txt", FileMode.Create, isoStore);
      new IsolatedStorageFileStream("AnotherTopLevelDirectory/InsideDirectory/HereIAm.txt", FileMode.Create, isoStore);
      // End of setup.

      Console.WriteLine('\r');
      Console.WriteLine("Here is a list of all directories in this isolated store:");

      foreach(string directory in GetAllDirectories("*", isoStore)){
         Console.WriteLine(directory);
      }
      Console.WriteLine('\r');

      // Retrieve all the files in the directory by calling the GetFiles 
      // method.

      Console.WriteLine("Here is a list of all the files in this isolated store:");
      foreach(string file in GetAllFiles("*", isoStore)){
         Console.WriteLine(file);
      }  

   }// End of Main.
  
   // Method to retrieve all directories, recursively, within a store.

   public static string[] GetAllDirectories(string pattern, IsolatedStorageFile storeFile){

      // Get the root of the search string.

      string root = Path.GetDirectoryName(pattern);

      if (root != "") root += "/";

      // Retrieve directories.

      string[] directories;

      directories = storeFile.GetDirectoryNames(pattern);

      ArrayList directoryList = new ArrayList(directories);

      // Retrieve subdirectories of matches.

      for (int i = 0, max = directories.Length; i < max; i++){
         string directory = directoryList[i] + "/";
         string[] more = GetAllDirectories (root + directory + "*", storeFile);

         // For each subdirectory found, add in the base path.

         for (int j = 0; j < more.Length; j++)
            more[j] = directory + more[j];

         // Insert the subdirectories into the list and 
         // update the counter and upper bound.

         directoryList.InsertRange(i+1, more);
         i += more.Length;
         max += more.Length;
      }

      return (string[])directoryList.ToArray(Type.GetType("System.String"));
   }

   public static string[] GetAllFiles(string pattern, IsolatedStorageFile storeFile){

      // Get the root and file portions of the search string.

      string fileString = Path.GetFileName(pattern);

      string[] files;
      files = storeFile.GetFileNames(pattern);

      ArrayList fileList = new ArrayList(files);

      // Loop through the subdirectories, collect matches, 
      // and make separators consistent.

      foreach(string directory in GetAllDirectories( "*", storeFile))
         foreach(string file in storeFile.GetFileNames(directory + "/" + fileString))
            fileList.Add((directory + "/" + file));

      return (string[])fileList.ToArray(Type.GetType("System.String"));
         
   }// End of GetFiles.

}

Consulte também

Referência

IsolatedStorageFile

Outros recursos

Executando Tarefas de Armazenamento Isolado