Share via


Comment : rechercher des fichiers et des répertoires existants dans un stockage isolé

Mise à jour : novembre 2007

Vous pouvez également rechercher des répertoires et des fichiers existants en utilisant un fichier de stockage isolé. Souvenez-vous que dans un magasin, les noms de fichier et de répertoire sont spécifiés par rapport à la racine du système de fichiers virtuel. En outre, dans le système de fichiers Windows, les noms de fichier et de répertoire ne distinguent pas la casse.

Pour rechercher un répertoire, utilisez la méthode d'instance GetDirectoryNames de IsolatedStorageFile. GetDirectoryNames accepte une chaîne représentant un modèle de recherche. Les caractères génériques à un seul caractère (?) et à caractères multiples (*) sont pris en charge. Ces caractères génériques ne peuvent pas apparaître dans la partie du nom du chemin d'accès ; directory1/*ect* est une chaîne recherchée valide, contrairement à *ect*/directory2.

Pour rechercher un fichier, utilisez la méthode d'instance GetFileNames de IsolatedStorageFile. Les limites des caractères génériques des chaînes recherchées qui s'appliquent à GetDirectoryNames s'appliquent également à GetFileNames.

GetDirectoryNames et GetFileNames ne sont pas récursifs ; IsolatedStorageFile ne propose pas de méthode pour répertorier tous les répertoires ou les fichiers de votre magasin. Toutefois, des exemples de méthodes récursives font partie du code ci-dessous. Notez également que GetDirectoryNames et GetFileNames retournent uniquement le répertoire ou le nom de fichier de l'élément trouvé. Par exemple, si une correspondance existe dans le répertoire RootDir/SubDir/SubSubDir, SubSubDir sera retourné dans le tableau des résultats.

FindingExistingFilesAndDirectories, exemple

L'exemple de code suivant illustre la création de fichiers et de répertoires dans un magasin isolé. Premièrement, un magasin isolé par utilisateur, par domaine et par assembly est extrait et placé dans la variable isoStore. La méthode CreateDirectory définit quelques répertoires distincts et la méthode IsolatedStorageFileStream crée quelques fichiers dans ces répertoires. Le code parcourt ensuite les résultats de la méthode GetAllDirectories. Cette méthode utilise GetDirectoryNames pour rechercher tous les noms de répertoire dans le répertoire en cours. Ces noms sont stockés dans un tableau, puis GetAllDirectories s'appelle, en passant chacun des répertoires rencontrés. Tous les noms de répertoire sont alors retournés dans un tableau. Ensuite, le code appelle la méthode GetAllFiles. Cette méthode appelle GetAllDirectories pour découvrir les noms de tous les répertoires, puis vérifie les fichiers de chacun de ces répertoires en utilisant la méthode GetFileNames. Le résultat est retourné dans un tableau.

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.

}

Voir aussi

Référence

IsolatedStorageFile

Autres ressources

Exécution de tâches de stockage isolé