Sdílet prostřednictvím


Postupy: Hledání existujících souborů a adresářů v izolovaném úložišti

Můžete také hledat stávající adresáře a soubory pomocí souboru izolovaného úložiště. Je třeba mít na paměti, že v rámci úložiště jsou názvy souborů a adresářů určeny s ohledem na kořenový adresář virtuálního souborového systému. Názvy souborů a adresářů v systému souborů systému Windows nezáleží na velikosti písmen.

Chcete-li vyhledávat adresář, použijte instanci metody GetDirectoryNames z IsolatedStorageFile. GetDirectoryNames přijímá řetězec představující vzorek pro vyhledávání. Jsou podporovány obojí zástupné znaky ? a multi znak *. Tyto zástupné znaky se nemohou objevit v části názvu s cestou k souboru. To znamená, že directory1/*ect* je platný řetězec pro vyhledávání, ale retězec *ect*/directory2 není platný.

Chcete-li vyhledat soubor, použijte instanci metody GetFileNames z IsolatedStorageFile. Stejné omezení pro zástupné znaky v řetězci pro vyhledávání, které se vztahujíce k GetDirectoryNames se také týká GetFileNames.

Ani GetDirectoryNames nebo GetFileNames není rekurzivní. To znamená, že IsolatedStorageFile neposkytuje metody pro výpis všech adresářů nebo souborů v úložišti. Avšak příklady rekurzivních metod jsou součástí kódu uvedeného níže. Všimněte si také, jak GetDirectoryNames a GetFileNames vrací pouze název nalezeného adresáře nebo souboru. Například pokud je nalezen adresář RootDir/SubDir/SubSubDir, bude v poli výsledku vráceno SubSubDir.

Příklad FindingExistingFilesAndDirectories

Následující příklad kódu ukazuje, jak vytvořit soubory a adresáře v izolovaném úložišti. Nejprve je získáno úložiště izolované podle uživatele, domény a sestavení a je umístěno do proměnné isoStore. Metoda CreateDirectory slouží k vytvoření několika různých adresářů a metoda IsolatedStorageFileStream vytvoří některé soubory v těchto adresářích. Kód poté prochází výsledky metody GetAllDirectories. Tato metoda používá GetDirectoryNames k nalezení všech názvů adresářů v aktuálním adresáři. Tyto názvy jsou uloženy do pole a potom GetAllDirectories volá sebe sama a předává každý adresář, který najde. Výsledkem jsou všechny názvy adresářů vrácené v poli. Dále kód volá metodu GetAllFiles. Tato metoda volá GetAllDirectories pro zjištění názvů všech adresářů a poté prohledá výskyty souboru v každém z těchto adresářů pomocí metody GetFileNames. Výsledek je vrácen v poli pro zobrazení.

Imports System
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")

        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:")

        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
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");
        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 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.
}
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();
}

Viz také

Odkaz

IsolatedStorageFile

Koncepty

Izolované úložiště