方法 : 分離ストレージでストアを列挙する
更新 : 2007 年 11 月
IsolatedStorageFile の静的メソッドである GetEnumerator を使用して、現在のユーザーに関するすべての分離ストアを列挙できます。GetEnumerator は、IsolatedStorageScope の値を受け取り、IsolatedStorageFile 列挙子を返します。IsolatedStorageScope の値としてサポートされているのは、User だけです。ストアを列挙するには、IsolatedStorageContainment の値 AdministerIsolatedStorageByUser を指定する IsolatedStorageFilePermission が必要です。IsolatedStorageScope の値 User を指定して GetEnumerator を呼び出すと、現在のユーザーに対して定義されている IsolatedStorageFiles の配列が返されます。
EnumeratingStores の例
ユーザーおよびアセンブリ別に分離されたストアを取得し、いくつかのファイルを作成するコード例を次に示します。GetEnumerator メソッドが呼び出され、結果が IEnumerator に置かれます。次に、IEnumerator 内を移動しながらファイルのサイズを集計し、結果をコンソールに報告します。実際の列挙は、わかりやすいように、残りのコードとは別にファイルの末尾に記述されているプライベート EnumerateTheStore メソッドで実行されます。
Imports System
Imports System.IO
Imports System.IO.IsolatedStorage
Imports System.Collections
Public Module modmain
Sub Main()
' Get an isolated store for this assembly and put it into an
' IsolatedStorageFile object.
Dim isoStore As IsolatedStorageFile
isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User Or IsolatedStorageScope.Assembly Or IsolatedStorageScope.Domain, Nothing, Nothing)
' This code creates a few files so that they can be enumerated.
Dim FileA As IsolatedStorageFileStream
FileA = New IsolatedStorageFileStream("TestFileA.Txt", FileMode.Create, isoStore)
Dim FileB As IsolatedStorageFileStream
FileB = New IsolatedStorageFileStream("TestFileB.Txt", FileMode.Create, isoStore)
Dim FileC As IsolatedStorageFileStream
FileC = New IsolatedStorageFileStream("TestFileC.Txt", FileMode.Create, isoStore)
Dim FileD As IsolatedStorageFileStream
FileD = New IsolatedStorageFileStream("TestFileD.Txt", FileMode.Create, isoStore)
FileA.Close()
FileB.Close()
FileC.Close()
FileD.Close()
' There might be a small delay between when the above code
' executes and when the files are created in the store.
' Closing and opening the store in this example ensures that
' the common language runtime has finished creating the files.
isoStore.Close()
isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User Or IsolatedStorageScope.Assembly, Nothing, Nothing)
' This line of code calls a method at the bottom of the program
' that puts all the files in isoStore into an IEnumerator.
Dim allFiles As IEnumerator
allFiles = EnumerateTheStore(isoStore)
Dim totalSize As Long
' This code counts up the sizes of all the stores.
While (allFiles.MoveNext())
Dim store As IsolatedStorageFile
' Explicity convert the current object in allFiles
' into an IsolatedStorageFile.
store = CType(allFiles.Current, IsolatedStorageFile)
' Find the current size of the IsolatedStorageFile as
' an UInt64, and convert that to a string. Get the value
' of the string as a double and convert that to a Long.
totalSize += CLng(Val(store.CurrentSize.ToString))
End While
' Print out the value.
System.Console.WriteLine("The size of all the isolated stores in the user scope = " + totalSize.ToString)
End Sub
Function EnumerateTheStore(ByVal isoStore As IsolatedStorageFile) As IEnumerator
Return isoStore.GetEnumerator(IsolatedStorageScope.User)
End Function
End Module
using System;
using System.IO;
using System.IO.IsolatedStorage;
using System.Collections;
public class EnumeratingStores{
public static int Main(){
// Get an isolated store for this assembly and put it into an
// IsolatedStorageFile object.
IsolatedStorageFile isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);
// This code creates a few files so that they can be enumerated.
IsolatedStorageFileStream streamA = new IsolatedStorageFileStream("TestFileA.Txt", FileMode.Create, isoStore);
IsolatedStorageFileStream streamB = new IsolatedStorageFileStream("TestFileB.Txt", FileMode.Create, isoStore);
IsolatedStorageFileStream streamC = new IsolatedStorageFileStream("TestFileC.Txt", FileMode.Create, isoStore);
IsolatedStorageFileStream streamD = new IsolatedStorageFileStream("TestFileD.Txt", FileMode.Create, isoStore);
streamA.Close();
streamB.Close();
streamC.Close();
streamD.Close();
// There might be a small delay between when the above code
// executes and when the files are created in the store.
// Closing and opening the store in this example ensures that
// the common language runtime has finished creating the files.
isoStore .Close();
isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);
// This line of code calls a method at the bottom of the program
// that puts all the files in isoStore into an IEnumerator.
IEnumerator allFiles = EnumerateTheStore (isoStore);
long totalsize = 0;
// This code counts up the sizes of all the stores.
while(allFiles .MoveNext()){
IsolatedStorageFile store = (IsolatedStorageFile)allFiles.Current;
totalsize += (long)store.CurrentSize;
}
Console.WriteLine("The total size = "+totalsize);
return 0;
}
// This method returns an IEnucontaining all the files for a user.
private static IEnumerator EnumerateTheStore(IsolatedStorageFile isoStore){
IEnumerator e = IsolatedStorageFile.GetEnumerator(IsolatedStorageScope.User);
return e;
}
}