Share via


尋找現有檔案和目錄

您也可以使用隔離儲存區檔案來搜尋現有的目錄和檔案。請記得,存放區內,檔案和目錄名稱相對於虛擬檔案系統的根來指定。Windows 檔案系統中的檔案和目錄名稱也會區分大小寫。

若要搜尋目錄,請使用 IsolatedStorageFileGetDirectoryNames 執行個體方法。GetDirectoryNames 接受代表搜尋模式的字串。單一字元 (?) 和多重字元 (*) 的萬用字元 (Wildcard Character) 都被支援。這些萬用字元不能出現在名稱的路徑部分;也就是,directory1/*ect* 為有效的搜尋字串,但 *ect*/directory2 則否。

若要搜尋檔案,請使用 IsolatedStorageFileGetFileNames 執行個體方法。對套用於 GetDirectoryNames 的搜尋字串內萬用字元的同樣限制也套用於 GetFileNames

GetDirectoryNamesGetFileNames 都不是遞迴的;也就是,IsolatedStorageFile 並不提供列出您存放區中所有目錄或檔案的方法。然而,以下程式碼有一部分是遞迴方法的範例。也請注意,GetDirectoryNamesGetFileNames 兩者只會傳回找到項目的目錄或檔案名稱。例如,如果 RootDir/SubDir/SubSubDir 目錄上有符合項目,在結果陣列中將會傳回 SubSubDir

FindingExistingFilesAndDirectories 範例

下列程式碼範例說明如何在隔離存放區中建立檔案和目錄。首先,擷取使用者、定義域和組件所隔離的存放區,並置於 isoStore 變數中。CreateDirectory 方法是用來設定一些不同的目錄,而 IsolatedStorageFileStream 方法則會在這些目錄中建立一些檔案。程式碼接著對 GetAllDirectories 方法的結果執行迴圈。這個方法使用 GetDirectoryNames 來尋找目前目錄中的所有目錄名稱。這些名稱儲存在陣列中,而 GetAllDirectories 接著呼叫它本身,並傳入它所找到的每一個目錄。結果是陣列中傳回的所有目錄名稱。接下來,程式碼會呼叫 GetAllFiles 方法。此方法會呼叫 GetAllDirectories 找出所有目錄的名稱,接著使用 GetFileNames 方法,為檔案檢查每個目錄。結果在陣列中傳回以備顯示。

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.

}

請參閱

參考

IsolatedStorageFile

其他資源

執行隔離儲存區工作