如何:在独立存储中查找现有文件和目录

为了搜索独立存储中的目录,请使用 IsolatedStorageFile.GetDirectoryNames 方法。 此方法接受表示搜索模式的字符串。 您可以在搜索模式中使用单字符 (?) 和多字符 (*) 通配符,但是通配符必须出现在名称的最后一部分。 例如,directory1/*ect* 是有效的搜索字符串,但 *ect*/directory2 不是。

若要搜索文件,请使用 IsolatedStorageFile.GetFileNames 方法。 对适用于 GetDirectoryNames 的搜索字符串中通配符的限制也适用于 GetFileNames

这些方法都不是递归的;IsolatedStorageFile 类不提供用于列出存储区中所有目录或文件的任何方法。 但是,在下面的代码示例中显示有递归方法。

示例

下面的代码示例展示了如何在独立存储中创建文件和目录。 首先,检索一个为用户、域和程序集隔离的存储区,并放入 isoStore 变量。 CreateDirectory 方法用于设置几个不同的目录,IsolatedStorageFileStream(String, FileMode, IsolatedStorageFile) 构造函数在这些目录中创建了一些文件。 然后,代码循环访问 GetAllDirectories 方法的结果。 该方法使用 GetDirectoryNames 来查找当前目录中的所有目录名。 这些名称存储在数组中,然后 GetAllDirectories 调用其本身,传入它所找到的每个目录。 结果是所有目录名都返回到数组中。 接下来,代码调用 GetAllFiles 方法。 该方法调用 GetAllDirectories 来查找所有目录的名称,然后它使用 GetFileNames 方法检查文件的每个目录。 结果是在数组中返回,以供显示。

using namespace System;
using namespace System::IO;
using namespace System::IO::IsolatedStorage;
using namespace System::Collections;
using namespace System::Collections::Generic;

public class FindingExistingFilesAndDirectories
{
public:
    // Retrieves an array of all directories in the store, and
    // displays the results.
    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, (Type ^)nullptr, (Type ^)nullptr);
        isoStore->CreateDirectory("TopLevelDirectory");
        isoStore->CreateDirectory("TopLevelDirectory/SecondLevel");
        isoStore->CreateDirectory("AnotherTopLevelDirectory/InsideDirectory");
        gcnew IsolatedStorageFileStream("InTheRoot.txt", FileMode::Create, isoStore);
        gcnew 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:");

        for each (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:");
        for each (String^ file in GetAllFiles("*", isoStore))
        {
            Console::WriteLine(file);
        }

    } // End of Main.

    // Method to retrieve all directories, recursively, within a store.
    static List<String^>^ GetAllDirectories(String^ pattern, IsolatedStorageFile^ storeFile)
    {
        // Get the root of the search string.
        String^ root = Path::GetDirectoryName(pattern);

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

        // Retrieve directories.
        array<String^>^ directories = storeFile->GetDirectoryNames(pattern);

        List<String^>^ directoryList = gcnew List<String^>(directories);

        // Retrieve subdirectories of matches.
        for (int i = 0, max = directories->Length; i < max; i++)
        {
             String^ directory = directoryList[i] + "/";
             List<String^>^ more = GetAllDirectories (root + directory + "*", storeFile);

             // For each subdirectory found, add in the base path.
             for (int j = 0; j < more->Count; 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->Count;
            max += more->Count;
        }

        return directoryList;
    }

    static List<String^>^ GetAllFiles(String^ pattern, IsolatedStorageFile^ storeFile)
    {
        // Get the root and file portions of the search string.
        String^ fileString = Path::GetFileName(pattern);
        array<String^>^ files = storeFile->GetFileNames(pattern);

        List<String^>^ fileList = gcnew List<String^>(files);

        // Loop through the subdirectories, collect matches,
        // and make separators consistent.
        for each (String^ directory in GetAllDirectories( "*", storeFile))
        {
            for each (String^ file in storeFile->GetFileNames(directory + "/" + fileString))
            {
                fileList->Add((directory + "/" + file));
            }
        }

        return fileList;
    } // End of GetFiles.
};

int main()
{
    FindingExistingFilesAndDirectories::Main();
}
using System;
using System.IO;
using System.IO.IsolatedStorage;
using System.Collections;
using System.Collections.Generic;

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");
        isoStore.CreateFile("InTheRoot.txt");
        isoStore.CreateFile("AnotherTopLevelDirectory/InsideDirectory/HereIAm.txt");
        // 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 List<String> GetAllDirectories(string pattern, IsolatedStorageFile storeFile)
    {
        // Get the root of the search string.
        string root = Path.GetDirectoryName(pattern);

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

        // Retrieve directories.
        List<String> directoryList = new List<String>(storeFile.GetDirectoryNames(pattern));

        // Retrieve subdirectories of matches.
        for (int i = 0, max = directoryList.Count; i < max; i++)
        {
            string directory = directoryList[i] + "/";
            List<String> more = GetAllDirectories(root + directory + "*", storeFile);

            // For each subdirectory found, add in the base path.
            for (int j = 0; j < more.Count; 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.Count;
            max += more.Count;
        }

        return directoryList;
    }

    public static List<String> GetAllFiles(string pattern, IsolatedStorageFile storeFile)
    {
        // Get the root and file portions of the search string.
        string fileString = Path.GetFileName(pattern);

        List<String> fileList = new List<String>(storeFile.GetFileNames(pattern));

        // 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 fileList;
    } // End of GetFiles.
}
Imports System.IO
Imports System.IO.IsolatedStorage
Imports System.Collections
Imports System.Collections.Generic

Public class FindingExistingFilesAndDirectories
    ' These arrayLists hold the directory and file names as they are found.

    Private Shared directoryList As New List(Of String)
    Private Shared fileList As New List(Of String)

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

    Public Shared Sub Main()
        ' This part of the code sets up a few directories and files in the store.
        Dim isoStore As IsolatedStorageFile = IsolatedStorageFile.GetStore(IsolatedStorageScope.User Or _
            IsolatedStorageScope.Assembly Or IsolatedStorageScope.Domain, Nothing, Nothing)
        isoStore.CreateDirectory("TopLevelDirectory")
        isoStore.CreateDirectory("TopLevelDirectory/SecondLevel")
        isoStore.CreateDirectory("AnotherTopLevelDirectory/InsideDirectory")
        isoStore.CreateFile("InTheRoot.txt")
        isoStore.CreateFile("AnotherTopLevelDirectory/InsideDirectory/HereIAm.txt")
        ' End of setup.

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

        GetAllDirectories("*", isoStore)
        For Each directory As String In directoryList
            Console.WriteLine(directory)
        Next

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

        GetAllFiles(isoStore)
        For Each file As String In fileList
            Console.WriteLine(file)
        Next
    End Sub

    Public Shared Sub GetAllDirectories(ByVal pattern As String, ByVal storeFile As IsolatedStorageFile)
        ' Retrieve directories.
        Dim directories As String() = storeFile.GetDirectoryNames(pattern)

        For Each directory As String 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

    Public Shared Sub GetAllFiles(ByVal storefile As IsolatedStorageFile)
        ' This adds the root to the directory list.
        directoryList.Add("*")
        For Each directory As String In directoryList
            Dim files As String() = storefile.GetFileNames(directory + "*")
            For Each dirfile As String In files
                fileList.Add(dirfile)
            Next
        Next
    End Sub
End Class

请参阅