Como: Localizar arquivos e diretórios existentes no armazenamento isolado
Para procurar um diretório no armazenamento isolado, use o método IsolatedStorageFile.GetDirectoryNames. Esse método usa uma cadeia de caracteres que representa um padrão de pesquisa. Você pode usar o caractere único (?) e vários caracteres (*) caracteres curinga no padrão de pesquisa, mas os caracteres curinga devem aparecer na parte final do nome. Por exemplo, directory1/*ect*
é uma cadeia de caracteres de pesquisa válida, mas *ect*/directory2
não é.
Para procurar um arquivo, use o método IsolatedStorageFile.GetFileNames. A restrição para caracteres curinga em cadeias de caracteres de pesquisa que se aplica a GetDirectoryNames também se aplica a GetFileNames.
Nenhum desses métodos é recursivo; a classe IsolatedStorageFile fornece métodos para listar todos os diretórios ou arquivos no repositório. No entanto, os métodos recursivos são mostrados no exemplo de código a seguir.
Exemplo
O exemplo de código a seguir ilustra como criar arquivos e diretórios em um repositório isolado. Primeiro, um repositório isolado para usuário, domínio e assembly é recuperado e colocado na variável isoStore
. O método CreateDirectory é usado para configurar algumas pastas diferentes, e o construtor IsolatedStorageFileStream(String, FileMode, IsolatedStorageFile) cria alguns arquivos nesses diretórios. O código executa um loop através dos resultados do método GetAllDirectories
. Esse método usa GetDirectoryNames para localizar todos os nomes de diretório no diretório atual. Esses nomes são armazenados em uma matriz, e GetAllDirectories
chama a si mesmo, passando cada diretório encontrado. Como resultado, todos os nomes de diretório são retornados em uma matriz. Em seguida, o código chama o método GetAllFiles
. Este método chama GetAllDirectories
para descobrir os nomes de todos os diretórios e verifica cada diretório de arquivos usando o método GetFileNames. O resultado é retornado em uma matriz para exibição.
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