IsolatedStorageFileStream クラス
アセンブリ: mscorlib (mscorlib.dll 内)


このクラスを使用して、分離ストレージのファイルの読み取り、書き込み、および作成を行います。
このクラスは FileStream を拡張したクラスであるため、StreamReader または StreamWriter の構築など、通常なら FileStream を使用する多くの場面で IsolatedStorageFileStream のインスタンスを使用できます。

次のコンソール アプリケーションでは、IsolatedStorageFile と IsolatedStorageFileStream を使用して、分離ストレージ ファイルにデータを書き込む例を示しています。このアプリケーションでは、ユーザーはログインを要求されます。ユーザーが新規ユーザーの場合は、News 用 URL および Sports 用 URL が分離ストレージファイルに個人用の環境設定として記録されます。ユーザーが以前にもログインしたことのある場合は、そのユーザーの現在の環境設定が表示されます。この名前空間全体を通じて使用するコード例は、このサンプル アプリケーションを前提としています。分離ストレージ ツール (Storeadm.exe) ユーティリティを使用すると、このコンソール アプリケーションで作成された分離ストレージファイルを一覧および削除できます。
'This sample demonstrates methods of classes found in the System.IO IsolatedStorage namespace. Imports System Imports System.IO Imports System.IO.IsolatedStorage Imports System.Security.Policy Imports Microsoft.VisualBasic Imports Microsoft.Win32.SafeHandles Imports System.Security.Permissions Namespace ISOCS _ Class ConsoleApp <STAThread()> _ Overloads Shared Sub Main(ByVal args() As String) ' Prompt the user for their username. Console.WriteLine("Enter your login ID:") ' Does no error checking. Dim lp As New LoginPrefs(Console.ReadLine()) If lp.NewPrefs Then Console.WriteLine("Please set preferences for a new user.") GatherInfoFromUser(lp) ' Write the new preferences to storage. Dim percentUsed As Double = lp.SetPrefsForUser() Console.WriteLine(("Your preferences have been written. Current space used is " & percentUsed.ToString() & " %")) Else Console.WriteLine("Welcome back.") Console.WriteLine("Your preferences have expired, please reset them.") GatherInfoFromUser(lp) lp.SetNewPrefsForUser() Console.WriteLine("Your news site has been set to {0}" & ControlChars.Cr & " and your sports site has been set to {1}.", lp.NewsUrl, lp.SportsUrl) End If lp.GetIsoStoreInfo() Console.WriteLine("Enter 'd' to delete the IsolatedStorage files and exit, or press any other key to exit without deleting files.") Dim consoleInput As String = Console.ReadLine() If consoleInput.ToLower() = "d" Then lp.DeleteFiles() lp.DeleteDirectories() End If End Sub 'Main Shared Sub GatherInfoFromUser(ByVal lp As LoginPrefs) Console.WriteLine("Please enter the URL of your news site.") lp.NewsUrl = Console.ReadLine() Console.WriteLine("Please enter the URL of your sports site.") lp.SportsUrl = Console.ReadLine() End Sub 'GatherInfoFromUser End Class 'ConsoleApp _ <SecurityPermissionAttribute(SecurityAction.Demand, Flags:=SecurityPermissionFlag.UnmanagedCode)> _ Public Class LoginPrefs Public Sub New(ByVal myUserName As String) userName = myUserName myNewPrefs = GetPrefsForUser() End Sub 'New Private userName As String Private myNewsUrl As String Public Property NewsUrl() As String Get Return myNewsUrl End Get Set(ByVal Value As String) myNewsUrl = Value End Set End Property Private mySportsUrl As String Public Property SportsUrl() As String Get Return mySportsUrl End Get Set(ByVal Value As String) mySportsUrl = Value End Set End Property Private myNewPrefs As Boolean Public ReadOnly Property NewPrefs() As Boolean Get Return myNewPrefs End Get End Property Private Function GetPrefsForUser() As Boolean Try ' Retrieve an IsolatedStorageFile for the current Domain and Assembly. Dim isoFile As IsolatedStorageFile = _ IsolatedStorageFile.GetStore(IsolatedStorageScope.User _ Or IsolatedStorageScope.Assembly _ Or IsolatedStorageScope.Domain, Nothing, Nothing) Dim isoStream As New IsolatedStorageFileStream(Me.userName, FileMode.Open, _ FileAccess.Read, FileShare.Read) ' farThe code executes to this point only if a file corresponding to the username exists. ' Though you can perform operations on the stream, you cannot get a handle to the file. Try Dim aFileHandle As SafeFileHandle = isoStream.SafeFileHandle Console.WriteLine(("A pointer to a file handle has been obtained. " & aFileHandle.ToString() & " " & aFileHandle.GetHashCode())) Catch ex As Exception ' Handle the exception. Console.WriteLine("Expected exception") Console.WriteLine(ex.ToString()) End Try Dim reader As New StreamReader(isoStream) ' Read the data. Me.NewsUrl = reader.ReadLine() Me.SportsUrl = reader.ReadLine() reader.Close() isoFile.Close() Return False Catch ex As System.IO.FileNotFoundException ' Expected exception if a file cannot be found. This indicates that we have a new user. Return True End Try End Function 'GetPrefsForUser Public Function GetIsoStoreInfo() As Boolean Try 'Get a User store with type evidence for the current Domain and the Assembly. Dim isoFile As IsolatedStorageFile = _ IsolatedStorageFile.GetStore(IsolatedStorageScope.User Or _ IsolatedStorageScope.Assembly Or IsolatedStorageScope.Domain, _ GetType(System.Security.Policy.Url), GetType(System.Security.Policy.Url)) Dim dirNames As String() = isoFile.GetDirectoryNames("*") Dim fileNames As String() = isoFile.GetFileNames("*") Dim name As String ' List directories currently in this Isolated Storage. If dirNames.Length > 0 Then For Each name In dirNames Console.WriteLine("Directory Name: " & name) Next name End If ' List the files currently in this Isolated Storage. ' The list represents all users who have personal preferences stored for this application. If fileNames.Length > 0 Then For Each name In fileNames Console.WriteLine("File Name: " & name) Next name End If isoFile.Close() Return True Catch ex As Exception Console.WriteLine(ex.ToString()) End Try End Function 'GetIsoStoreInfo Public Function SetPrefsForUser() As Double Try Dim isoFile As IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForDomain() ' Open or create a writable file. Dim isoStream As New IsolatedStorageFileStream(Me.userName, FileMode.OpenOrCreate, _ FileAccess.Write, isoFile) Dim writer As New StreamWriter(isoStream) writer.WriteLine(Me.NewsUrl) writer.WriteLine(Me.SportsUrl) ' Calculate the amount of space used to record the user's preferences. Dim d As Double = Convert.ToDouble(isoFile.CurrentSize) / Convert.ToDouble(isoFile.MaximumSize) Console.WriteLine(("CurrentSize = " & isoFile.CurrentSize.ToString())) Console.WriteLine(("MaximumSize = " & isoFile.MaximumSize.ToString())) ' StreamWriter.Close implicitly closes isoStream. writer.Close() isoFile.Dispose() isoFile.Close() Return d Catch ex As Exception ' Add code here to handle the exception. Console.WriteLine(ex) Return 0.0 End Try End Function 'SetPrefsForUser Public Sub DeleteFiles() Try Dim isoFile As IsolatedStorageFile = IsolatedStorageFile.GetStore(IsolatedStorageScope.User Or IsolatedStorageScope.Assembly Or IsolatedStorageScope.Domain, GetType(System.Security.Policy.Url), GetType(System.Security.Policy.Url)) Dim name As String Dim dirNames As String() = isoFile.GetDirectoryNames("*") Dim fileNames As String() = isoFile.GetFileNames("*") ' List the files currently in this Isolated Storage. ' The list represents all users who have personal ' preferences stored for this application. If fileNames.Length > 0 Then For Each name In fileNames ' Delete the files. isoFile.DeleteFile(name) Next name 'Confirm no files are left. fileNames = isoFile.GetFileNames("*") End If Catch ex As Exception Console.WriteLine(ex.ToString()) End Try End Sub 'DeleteFiles ' This method deletes directories in the specified Isolated Storage, after first ' deleting the files they contain. In this example, the Archive directory is deleted. ' There should be no other directories in this Isolated Storage. Public Sub DeleteDirectories() Try Dim isoFile As IsolatedStorageFile = IsolatedStorageFile.GetStore(IsolatedStorageScope.User _ Or IsolatedStorageScope.Assembly Or IsolatedStorageScope.Domain, _ GetType(System.Security.Policy.Url), GetType(System.Security.Policy.Url)) Dim name As String Dim dirNames As String() = isoFile.GetDirectoryNames("*") Dim fileNames As String() = isoFile.GetFileNames("Archive\*") ' Delete all the files currently in the Archive directory. If fileNames.Length > 0 Then For Each name In fileNames isoFile.DeleteFile(("Archive\" & name)) Next name 'Confirm no files are left. fileNames = isoFile.GetFileNames("Archive\*") End If If dirNames.Length > 0 Then For Each name In dirNames ' Delete the Archive directory. isoFile.DeleteDirectory(name) Next name End If dirNames = isoFile.GetDirectoryNames("*") isoFile.Remove() Catch ex As Exception Console.WriteLine(ex.ToString()) End Try End Sub 'DeleteDirectories Public Function SetNewPrefsForUser() As Double Try Dim inputChar As Byte Dim isoFile As IsolatedStorageFile = IsolatedStorageFile.GetStore(IsolatedStorageScope.User Or IsolatedStorageScope.Assembly Or IsolatedStorageScope.Domain, GetType(System.Security.Policy.Url), GetType(System.Security.Policy.Url)) ' If this is not a new user, archive the old preferences and ' overwrite them using the new preferences. If Not Me.myNewPrefs Then If isoFile.GetDirectoryNames("Archive").Length = 0 Then isoFile.CreateDirectory("Archive") Else Dim source As New IsolatedStorageFileStream(Me.userName, FileMode.OpenOrCreate, isoFile) Dim canWrite, canRead As Boolean ' This is the stream from which data will be read. If source.CanRead Then canRead = True Else canRead = False Console.WriteLine("Is the source file readable? " & canRead) Console.WriteLine("Creating new IsolatedStorageFileStream for Archive.") ' Open or create a writable file. Dim target As New IsolatedStorageFileStream("Archive\ " & Me.userName, _ FileMode.OpenOrCreate, FileAccess.Write, FileShare.Write, isoFile) ' This is the stream to which data will be written. If target.CanWrite Then canWrite = True Else canWrite = False Console.WriteLine("Is the target file writable? " & canWrite) target.SetLength(0) 'rewind the target file ' Stream the old file to a new file in the Archive directory. If source.IsAsync And target.IsAsync Then ' IsolatedStorageFileStreams cannot be asynchronous. However, you ' can use the asynchronous BeginRead and BeginWrite functions ' with some possible performance penalty. Console.WriteLine("IsolatedStorageFileStreams cannot be asynchronous.") Else Console.WriteLine("Writing data to the new file.") While source.Position < source.Length inputChar = CByte(source.ReadByte()) target.WriteByte(inputChar) End While ' Determine the size of the IsolatedStorageFileStream ' by checking its Length property. Console.WriteLine(("Total Bytes Read: " & source.Length)) End If ' After you have read and written to the streams, close them. target.Close() source.Close() End If End If ' Open or create a writable file with a maximum size of 10K. Dim isoStream As New IsolatedStorageFileStream(Me.userName, FileMode.OpenOrCreate, _ FileAccess.Write, FileShare.Write, 10240, isoFile) isoStream.SetLength(0) 'Position to overwrite the old data. Dim writer As New StreamWriter(isoStream) ' Update the data based on the new inputs. writer.WriteLine(Me.NewsUrl) writer.WriteLine(Me.SportsUrl) ' Calculate the amount of space used to record this user's preferences. Dim d As Double = Convert.ToDouble(isoFile.CurrentSize) / Convert.ToDouble(isoFile.MaximumSize) Console.WriteLine(("CurrentSize = " & isoFile.CurrentSize.ToString())) Console.WriteLine(("MaximumSize = " & isoFile.MaximumSize.ToString())) ' StreamWriter.Close implicitly closes isoStream. writer.Close() isoFile.Close() Return d Catch ex As Exception Console.WriteLine(ex.ToString()) Return 0.0 End Try End Function 'SetNewPrefsForUser End Class 'LoginPrefs End Namespace 'ISOCS
// This sample demonstrates methods of classes found in the System.IO IsolatedStorage namespace. using System; using System.IO; using System.IO.IsolatedStorage; using System.Security.Policy; using Microsoft.Win32.SafeHandles; using System.Security.Permissions; [assembly: CLSCompliantAttribute(true)] class ConsoleApp { [STAThread] static void Main(string[] args) { // Prompt the user for their username. Console.WriteLine("Login:"); // Does no error checking. LoginPrefs lp = new LoginPrefs(Console.ReadLine()); if (lp.NewPrefs) { Console.WriteLine("Please set preferences for a new user."); GatherInfoFromUser(lp); // Write the new preferences to storage. double percentUsed = lp.SetPrefsForUser(); Console.WriteLine("Your preferences have been written. Current space used is " + percentUsed.ToString() + " %"); } else { Console.WriteLine("Welcome back."); Console.WriteLine("Your preferences have expired, please reset them."); GatherInfoFromUser(lp); lp.SetNewPrefsForUser(); Console.WriteLine("Your news site has been set to {0}\n and your sports site has been set to {1}.", lp.NewsUrl, lp.SportsUrl); } lp.GetIsoStoreInfo(); Console.WriteLine("Enter 'd' to delete the IsolatedStorage files and exit, or press any other key to exit without deleting files."); string consoleInput = Console.ReadLine(); if (consoleInput.ToLower() == "d") { lp.DeleteFiles(); lp.DeleteDirectories(); } } static void GatherInfoFromUser(LoginPrefs lp) { Console.WriteLine("Please enter the URL of your news site."); lp.NewsUrl = Console.ReadLine(); Console.WriteLine("Please enter the URL of your sports site."); lp.SportsUrl = Console.ReadLine(); } } [SecurityPermissionAttribute(SecurityAction.Demand, Flags=SecurityPermissionFlag.UnmanagedCode)] public class LoginPrefs { public LoginPrefs(string myUserName) { userName = myUserName; myNewPrefs = GetPrefsForUser(); } string userName; string myNewsUrl; public string NewsUrl { get { return myNewsUrl; } set { myNewsUrl = value; } } string mySportsUrl; public string SportsUrl { get { return mySportsUrl; } set { mySportsUrl = value; } } bool myNewPrefs; public bool NewPrefs { get { return myNewPrefs; } } private bool GetPrefsForUser() { try { // Retrieve an IsolatedStorageFile for the current Domain and Assembly. IsolatedStorageFile isoFile = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly | IsolatedStorageScope.Domain, null, null); IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream(this.userName , FileMode.Open, FileAccess.Read, FileShare.Read); // The code executes to this point only if a file corresponding to the username exists. // Though you can perform operations on the stream, you cannot get a handle to the file. try { SafeFileHandle aFileHandle = isoStream.SafeFileHandle; Console.WriteLine("A pointer to a file handle has been obtained. " + aFileHandle.ToString() + " " + aFileHandle.GetHashCode()); } catch (Exception e) { // Handle the exception. Console.WriteLine("Expected exception"); Console.WriteLine(e); } StreamReader reader = new StreamReader(isoStream); // Read the data. this.NewsUrl = reader.ReadLine(); this.SportsUrl = reader.ReadLine(); reader.Close(); isoFile.Close(); return false; } catch (System.IO.FileNotFoundException) { // Expected exception if a file cannot be found. This indicates that we have a new user. return true; } } public bool GetIsoStoreInfo() { // Get a User store with type evidence for the current Domain and the Assembly. IsolatedStorageFile isoFile = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly | IsolatedStorageScope.Domain, typeof(System.Security.Policy.Url), typeof(System.Security.Policy.Url)); String[] dirNames = isoFile.GetDirectoryNames("*"); String[] fileNames = isoFile.GetFileNames("*"); // List directories currently in this Isolated Storage. if (dirNames.Length > 0) { for (int i = 0; i < dirNames.Length; ++i) { Console.WriteLine("Directory Name: " + dirNames[i]); } } // List the files currently in this Isolated Storage. // The list represents all users who have personal preferences stored for this application. if (fileNames.Length > 0) { for (int i = 0; i < fileNames.Length; ++i) { Console.WriteLine("File Name: " + fileNames[i]); } } isoFile.Close(); return true; } public double SetPrefsForUser() { try { IsolatedStorageFile isoFile; isoFile = IsolatedStorageFile.GetUserStoreForDomain(); // Open or create a writable file. IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream(this.userName , FileMode.OpenOrCreate, FileAccess.Write, isoFile); StreamWriter writer = new StreamWriter(isoStream); writer.WriteLine(this.NewsUrl); writer.WriteLine(this.SportsUrl); // Calculate the amount of space used to record the user's preferences. double d = isoFile.CurrentSize / isoFile.MaximumSize; Console.WriteLine("CurrentSize = " + isoFile.CurrentSize.ToString()); Console.WriteLine("MaximumSize = " + isoFile.MaximumSize.ToString()); // StreamWriter.Close implicitly closes isoStream. writer.Close(); isoFile.Dispose(); isoFile.Close(); return d; } catch (IsolatedStorageException ex) { // Add code here to handle the exception. Console.WriteLine(ex); return 0.0; } } public void DeleteFiles() { try { IsolatedStorageFile isoFile = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly | IsolatedStorageScope.Domain, typeof(System.Security.Policy.Url), typeof(System.Security.Policy.Url)); String[] dirNames = isoFile.GetDirectoryNames("*"); String[] fileNames = isoFile.GetFileNames("*"); // List the files currently in this Isolated Storage. // The list represents all users who have personal // preferences stored for this application. if (fileNames.Length > 0) { for (int i = 0; i < fileNames.Length; ++i) { // Delete the files. isoFile.DeleteFile(fileNames[i]); } // Confirm that no files remain. fileNames = isoFile.GetFileNames("*"); } } catch (Exception e) { Console.WriteLine(e.ToString()); } } // This method deletes directories in the specified Isolated Storage, after first // deleting the files they contain. In this example, the Archive directory is deleted. // There should be no other directories in this Isolated Storage. public void DeleteDirectories() { try { IsolatedStorageFile isoFile = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly | IsolatedStorageScope.Domain, typeof(System.Security.Policy.Url), typeof(System.Security.Policy.Url)); String[] dirNames = isoFile.GetDirectoryNames("*"); String[] fileNames = isoFile.GetFileNames("Archive\\*"); // Delete all the files currently in the Archive directory. if (fileNames.Length > 0) { for (int i = 0; i < fileNames.Length; ++i) { // Delete the files. isoFile.DeleteFile("Archive\\" + fileNames[i]); } // Confirm that no files remain. fileNames = isoFile.GetFileNames("Archive\\*"); } if (dirNames.Length > 0) { for (int i = 0; i < dirNames.Length; ++i) { // Delete the Archive directory. } } dirNames = isoFile.GetDirectoryNames("*"); isoFile.Remove(); } catch (Exception e) { Console.WriteLine(e.ToString()); } } public double SetNewPrefsForUser() { try { byte inputChar; IsolatedStorageFile isoFile = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly | IsolatedStorageScope.Domain, typeof(System.Security.Policy.Url), typeof(System.Security.Policy.Url)); // If this is not a new user, archive the old preferences and // overwrite them using the new preferences. if (!this.myNewPrefs) { if (isoFile.GetDirectoryNames("Archive").Length == 0) isoFile.CreateDirectory("Archive"); else { IsolatedStorageFileStream source = new IsolatedStorageFileStream(this.userName , FileMode.OpenOrCreate, isoFile); // This is the stream from which data will be read. Console.WriteLine("Is the source file readable? " + (source.CanRead ? "true" : "false")); Console.WriteLine("Creating new IsolatedStorageFileStream for Archive."); // Open or create a writable file. IsolatedStorageFileStream target = new IsolatedStorageFileStream("Archive\\ " + this.userName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Write, isoFile); Console.WriteLine("Is the target file writable? " + (target.CanWrite ? "true" : "false")); // Stream the old file to a new file in the Archive directory. if (source.IsAsync && target.IsAsync) { // IsolatedStorageFileStreams cannot be asynchronous. However, you // can use the asynchronous BeginRead and BeginWrite functions // with some possible performance penalty. Console.WriteLine("IsolatedStorageFileStreams cannot be asynchronous."); } else { Console.WriteLine("Writing data to the new file."); while (source.Position < source.Length) { inputChar = (byte)source.ReadByte(); target.WriteByte(inputChar); } // Determine the size of the IsolatedStorageFileStream // by checking its Length property. Console.WriteLine("Total Bytes Read: " + source.Length); } // After you have read and written to the streams, close them. target.Close(); source.Close(); } } // Open or create a writable file with a maximum size of 10K. IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream(this.userName , FileMode.OpenOrCreate, FileAccess.Write, FileShare.Write, 10240, isoFile); isoStream.Position = 0; // Position to overwrite the old data. StreamWriter writer = new StreamWriter(isoStream); // Update the data based on the new inputs. writer.WriteLine(this.NewsUrl); writer.WriteLine(this.SportsUrl); // Calculate the amount of space used to record this user's preferences. double d = isoFile.CurrentSize / isoFile.MaximumSize; Console.WriteLine("CurrentSize = " + isoFile.CurrentSize.ToString()); Console.WriteLine("MaximumSize = " + isoFile.MaximumSize.ToString()); // StreamWriter.Close implicitly closes isoStream. writer.Close(); isoFile.Close(); return d; } catch (Exception e) { Console.WriteLine(e.ToString()); return 0.0; } } }
// This sample demonstrates methods of classes found in the System.IO IsolatedStorage namespace. using namespace System; using namespace System::IO; using namespace System::IO::IsolatedStorage; using namespace System::Security::Policy; using namespace System::Security::Permissions; public ref class LoginPrefs { private: String^ userName; String^ newsUrl; String^ sportsUrl; bool newPrefs; public: [SecurityPermissionAttribute(SecurityAction::Demand, Flags=SecurityPermissionFlag::UnmanagedCode)] bool GetPrefsForUser() { try { // Retrieve an IsolatedStorageFile for the current Domain and Assembly. IsolatedStorageFile^ isoFile = IsolatedStorageFile::GetStore( static_cast<IsolatedStorageScope>(IsolatedStorageScope::User | IsolatedStorageScope::Assembly | IsolatedStorageScope::Domain), (Type^)nullptr, nullptr ); IsolatedStorageFileStream^ isoStream = gcnew IsolatedStorageFileStream( this->userName,FileMode::Open,FileAccess::ReadWrite,isoFile ); // farThe code executes to this point only if a file corresponding to the username exists. // Though you can perform operations on the stream, you cannot get a handle to the file. try { IntPtr aFileHandle = isoStream->Handle; Console::WriteLine( "A pointer to a file handle has been obtained. {0} {1}", aFileHandle, aFileHandle.GetHashCode() ); } catch ( Exception^ e ) { // Handle the exception. Console::WriteLine( "Expected exception" ); Console::WriteLine( e->ToString() ); } StreamReader^ reader = gcnew StreamReader( isoStream ); // Read the data. this->NewsUrl = reader->ReadLine(); this->SportsUrl = reader->ReadLine(); reader->Close(); isoFile->Close(); isoStream->Close(); return false; } catch ( Exception^ e ) { // Expected exception if a file cannot be found. This indicates that we have a new user. String^ errorMessage = e->ToString(); return true; } } bool GetIsoStoreInfo() { // Get a User store with type evidence for the current Domain and the Assembly. IsolatedStorageFile^ isoFile = IsolatedStorageFile::GetStore( static_cast<IsolatedStorageScope>(IsolatedStorageScope::User | IsolatedStorageScope::Assembly | IsolatedStorageScope::Domain), System::Security::Policy::Url::typeid, System::Security::Policy::Url::typeid ); array<String^>^dirNames = isoFile->GetDirectoryNames( "*" ); array<String^>^fileNames = isoFile->GetFileNames( "*" ); // List directories currently in this Isolated Storage. if ( dirNames->Length > 0 ) { for ( int i = 0; i < dirNames->Length; ++i ) { Console::WriteLine( "Directory Name: {0}", dirNames[ i ] ); } } // List the files currently in this Isolated Storage. // The list represents all users who have personal preferences stored for this application. if ( fileNames->Length > 0 ) { for ( int i = 0; i < fileNames->Length; ++i ) { Console::WriteLine( "File Name: {0}", fileNames[ i ] ); } } isoFile->Close(); return true; } double SetPrefsForUser() { try { IsolatedStorageFile^ isoFile; isoFile = IsolatedStorageFile::GetUserStoreForDomain(); // Open or create a writable file. IsolatedStorageFileStream^ isoStream = gcnew IsolatedStorageFileStream( this->userName,FileMode::OpenOrCreate,FileAccess::Write,isoFile ); StreamWriter^ writer = gcnew StreamWriter( isoStream ); writer->WriteLine( this->NewsUrl ); writer->WriteLine( this->SportsUrl ); // Calculate the amount of space used to record the user's preferences. double d = isoFile->CurrentSize / isoFile->MaximumSize; Console::WriteLine( "CurrentSize = {0}", isoFile->CurrentSize.ToString() ); Console::WriteLine( "MaximumSize = {0}", isoFile->MaximumSize.ToString() ); writer->Close(); isoFile->Close(); isoStream->Close(); return d; } catch ( Exception^ e ) { // Add code here to handle the exception. Console::WriteLine( e->ToString() ); return 0.0; } } void DeleteFiles() { try { IsolatedStorageFile^ isoFile = IsolatedStorageFile::GetStore( static_cast<IsolatedStorageScope>(IsolatedStorageScope::User | IsolatedStorageScope::Assembly | IsolatedStorageScope::Domain), System::Security::Policy::Url::typeid, System::Security::Policy::Url::typeid ); array<String^>^dirNames = isoFile->GetDirectoryNames( "*" ); array<String^>^fileNames = isoFile->GetFileNames( "*" ); // List the files currently in this Isolated Storage. // The list represents all users who have personal // preferences stored for this application. if ( fileNames->Length > 0 ) { for ( int i = 0; i < fileNames->Length; ++i ) { //Delete the files. isoFile->DeleteFile( fileNames[ i ] ); } fileNames = isoFile->GetFileNames( "*" ); } isoFile->Close(); } catch ( Exception^ e ) { Console::WriteLine( e->ToString() ); } } // This method deletes directories in the specified Isolated Storage, after first // deleting the files they contain. In this example, the Archive directory is deleted. // There should be no other directories in this Isolated Storage. void DeleteDirectories() { try { IsolatedStorageFile^ isoFile = IsolatedStorageFile::GetStore( static_cast<IsolatedStorageScope>(IsolatedStorageScope::User | IsolatedStorageScope::Assembly | IsolatedStorageScope::Domain), System::Security::Policy::Url::typeid, System::Security::Policy::Url::typeid ); array<String^>^dirNames = isoFile->GetDirectoryNames( "*" ); array<String^>^fileNames = isoFile->GetFileNames( "Archive\\*" ); // Delete the current files within the Archive directory. if ( fileNames->Length > 0 ) { for ( int i = 0; i < fileNames->Length; ++i ) { //delete files isoFile->DeleteFile( String::Concat("Archive\\", fileNames[ i ]) ); } fileNames = isoFile->GetFileNames( "Archive\\*" ); } if ( dirNames->Length > 0 ) { for ( int i = 0; i < dirNames->Length; ++i ) { // Delete the Archive directory. isoFile->DeleteDirectory( dirNames[ i ] ); } } dirNames = isoFile->GetDirectoryNames( "*" ); isoFile->Remove(); } catch ( Exception^ e ) { Console::WriteLine( e->ToString() ); } } double SetNewPrefsForUser() { try { Byte inputChar; IsolatedStorageFile^ isoFile = IsolatedStorageFile::GetStore( static_cast<IsolatedStorageScope>(IsolatedStorageScope::User | IsolatedStorageScope::Assembly | IsolatedStorageScope::Domain), System::Security::Policy::Url::typeid, System::Security::Policy::Url::typeid ); // If this is not a new user, archive the old preferences and // overwrite them using the new preferences. if ( !this->NewPrefs ) { if ( isoFile->GetDirectoryNames( "Archive" )->Length == 0 ) isoFile->CreateDirectory( "Archive" ); else { // This is the stream to which data will be written. IsolatedStorageFileStream^ source = gcnew IsolatedStorageFileStream( this->userName,FileMode::OpenOrCreate,isoFile ); // This is the stream from which data will be read. Console::WriteLine( "Is the source file readable? {0}", (source->CanRead ? (String^)"true" : "false") ); Console::WriteLine( "Creating new IsolatedStorageFileStream for Archive." ); // Open or create a writable file. IsolatedStorageFileStream^ target = gcnew IsolatedStorageFileStream( String::Concat("Archive\\",this->userName),FileMode::OpenOrCreate,FileAccess::Write,FileShare::Write,isoFile ); Console::WriteLine( "Is the target file writable? {0}", (target->CanWrite ? (String^)"true" : "false") ); // Stream the old file to a new file in the Archive directory. if ( source->IsAsync && target->IsAsync ) { // IsolatedStorageFileStreams cannot be asynchronous. However, you // can use the asynchronous BeginRead and BeginWrite functions // with some possible performance penalty. Console::WriteLine( "IsolatedStorageFileStreams cannot be asynchronous." ); } else { Console::WriteLine( "Writing data to the new file." ); while ( source->Position < source->Length ) { inputChar = (Byte)source->ReadByte(); target->WriteByte( (Byte)source->ReadByte() ); } // Determine the size of the IsolatedStorageFileStream // by checking its Length property. Console::WriteLine( "Total Bytes Read: {0}", source->Length.ToString() ); } // After you have read and written to the streams, close them. target->Close(); source->Close(); } } // Open or create a writable file, no larger than 10k IsolatedStorageFileStream^ isoStream = gcnew IsolatedStorageFileStream( this->userName,FileMode::OpenOrCreate,FileAccess::Write,FileShare::Write,10240,isoFile ); isoStream->Position = 0; // Position to overwrite the old data. StreamWriter^ writer = gcnew StreamWriter( isoStream ); // Update the data based on the new inputs. writer->WriteLine( this->NewsUrl ); writer->WriteLine( this->SportsUrl ); // Calculate the amount of space used to record this user's preferences. double d = isoFile->CurrentSize / isoFile->MaximumSize; Console::WriteLine( "CurrentSize = {0}", isoFile->CurrentSize.ToString() ); Console::WriteLine( "MaximumSize = {0}", isoFile->MaximumSize.ToString() ); // StreamWriter.Close implicitly closes isoStream. writer->Close(); isoFile->Close(); return d; } catch ( Exception^ e ) { Console::WriteLine( e->ToString() ); return 0.0; } } LoginPrefs( String^ aUserName ) { userName = aUserName; newPrefs = GetPrefsForUser(); } property String^ NewsUrl { String^ get() { return newsUrl; } void set( String^ value ) { newsUrl = value; } } property String^ SportsUrl { String^ get() { return sportsUrl; } void set( String^ value ) { sportsUrl = value; } } property bool NewPrefs { bool get() { return newPrefs; } } }; void GatherInfoFromUser( LoginPrefs^ lp ) { Console::WriteLine( "Please enter the URL of your news site." ); lp->NewsUrl = Console::ReadLine(); Console::WriteLine( "Please enter the URL of your sports site." ); lp->SportsUrl = Console::ReadLine(); } int main() { // Prompt the user for their username. Console::WriteLine( "Enter your login ID:" ); // Does no error checking. LoginPrefs^ lp = gcnew LoginPrefs( Console::ReadLine() ); if ( lp->NewPrefs ) { Console::WriteLine( "Please set preferences for a new user." ); GatherInfoFromUser( lp ); // Write the new preferences to storage. double percentUsed = lp->SetPrefsForUser(); Console::WriteLine( "Your preferences have been written. Current space used is {0}%", percentUsed ); } else { Console::WriteLine( "Welcome back." ); Console::WriteLine( "Your preferences have expired, please reset them." ); GatherInfoFromUser( lp ); lp->SetNewPrefsForUser(); Console::WriteLine( "Your news site has been set to {0}\n and your sports site has been set to {1}.", lp->NewsUrl, lp->SportsUrl ); } lp->GetIsoStoreInfo(); Console::WriteLine( "Enter 'd' to delete the IsolatedStorage files and exit, or press any other key to exit without deleting files." ); String^ consoleInput = Console::ReadLine(); if ( consoleInput->Equals( "d" ) ) { lp->DeleteFiles(); lp->DeleteDirectories(); } }

System.MarshalByRefObject
System.IO.Stream
System.IO.FileStream
System.IO.IsolatedStorage.IsolatedStorageFileStream


Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- IsolatedStorageFileStream クラスのページへのリンク