Freigeben über


Gewusst wie: Suchen vorhandener Dateien und Verzeichnisse in der isolierten Speicherung

Sie können auch nach vorhandenen Verzeichnissen und Dateien suchen und dazu eine Datei in isolierter Speicherung verwenden. Beachten Sie, dass Datei- und Verzeichnisnamen im Speicher in Bezug auf den Stamm des virtuellen Dateisystems angegeben werden. Außerdem wird in den Windows-Dateisystemen in Datei- und Verzeichnisnamen keine Groß- und Kleinschreibung berücksichtigt.

Zum Suchen eines Verzeichnisses verwenden Sie die GetDirectoryNames-Instanzenmethode namens IsolatedStorageFile. GetDirectoryNames lässt eine Zeichenfolge zu, die ein Suchmuster darstellt. Es werden Platzhalter sowohl für Einzelzeichen (?) als auch für mehrere Zeichen (*) unterstützt. Die Platzhalterzeichen dürfen nicht in der Pfadangabe des Namens vorkommen. Ein Beispiel: directory1/*ect* ist eine gültige Suchzeichenfolge, *ect*/directory2 dagegen nicht.

Zum Suchen nach einer Datei verwenden Sie die GetFileNames-Instanzenmethode von IsolatedStorageFile. Für GetFileNames gelten dieselben Einschränkungen bei Platzhalterzeichen wie für GetDirectoryNames.

Weder GetDirectoryNames noch GetFileNames sind rekursiv: Methoden zum Auflisten aller Verzeichnisse und Dateien in Ihrem Speicher werden von IsolatedStorageFile nicht unterstützt. Allerdings sind Beispiele für rekursive Methoden im unten angegebenen Code enthalten. Beachten Sie auch, dass GetDirectoryNames und GetFileNames nur den Verzeichnis- bzw. Dateinamen gefundener Elemente zurückgeben. Ein Beispiel: Wenn eine Übereinstimmung im Verzeichnis RootDir/SubDir/SubSubDir gefunden wird, wird SubSubDir im Array zurückgegeben.

Beispiel "FindingExistingFilesAndDirectories"

Im folgenden Codebeispiel wird das Erstellen von Dateien und Verzeichnissen in einem isolierten Speicher veranschaulicht. Zunächst wird ein nach Benutzer, Domäne und Assembly isolierter Speicher abgerufen und in der isoStore-Variable abgelegt. Die CreateDirectory-Methode wird zum Einrichten einiger verschiedener Verzeichnisse eingesetzt. Durch die IsolatedStorageFileStream-Methode werden einige Dateien in diesen Verzeichnissen erstellt. Der Code durchläuft dann die Ergebnisse der GetAllDirectories-Methode. Diese Methode verwendet GetDirectoryNames zur Suche aller Verzeichnisnamen im aktuellen Verzeichnis. Diese Namen werden in einem Array gespeichert. GetAllDirectories ruft sich danach selbst auf und übergibt jedes gefundene Verzeichnis. Das Ergebnis enthält alle Verzeichnisnamen, die in einem Array zurückgegeben werden. Anschließend wird durch den Code die GetAllFiles-Methode aufgerufen. Diese Methode ruft GetAllDirectories zur Suche nach den Namen aller Verzeichnisse auf und durchsucht anschließend mithilfe der GetFileNames-Methode jedes Verzeichnis nach Dateien. Das Ergebnis wird zur Darstellung in einem Array zurückgegeben.

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.

}

Siehe auch

Referenz

IsolatedStorageFile

Weitere Ressourcen

Verwenden der isolierten Speicherung