.NET TIPS

分離ストレージでディレクトリを使うには?[C#、VB]

デジタルアドバンテージ 一色 政彦
2007/04/19

 「TIPS:分離ストレージを活用するには?」では、分離ストレージの基本的な活用方法として、分離ストレージ・ファイル(Isolated Storage File)への書き込み(ファイルの作成も含む)と読み込み、ファイルの削除について説明した。このTIPSで説明しているのは、分離ストレージ環境の「ルート・ディレクトリ」にファイルを作成する方法だが、実は分離ストレージの内部では階層形式のディレクトリ環境を構築して、その任意のディレクトリ(以降、分離ストレージ・ディレクトリ)に分離ストレージ・ファイルを作成することが可能だ。

 そこで本稿では、分離ストレージ・ディレクトリを作成して、その中に分離ストレージ・ファイルを作成する方法を説明する。

 なお、以下の説明の中に出てくる、分離ストレージ環境を表す「IsolatedStorageFileクラス(System.IO.IsolatedStorage名前空間)」や、ファイルにデータを書き込んだり、読み込んだりするためのストリームを表す「IsolatedStorageFileStreamクラス(System.IO.IsolatedStorage名前空間)」についての詳細は、前掲のTIPSの内容をご参照いただきたい。

分離ストレージ・ディレクトリの作成

 まず、分離ストレージ・ディレクトリを作成するには、IsolatedStorageFileオブジェクト(=分離ストレージ環境)のCreateDirectoryメソッド(第1パラメータ:ディレクトリ・パス名の文字列)を使用すればよい。

 ディレクトリの中にサブ・ディレクトリを作成するには、その階層を「/」で区切って指定する。例えば、ルート・ディレクトリの直下に「TopLevelDirectory」というディレクトリがあり、その中に「2ndLevelDirectory」を作成する場合には、次のような形式でディレクトリ・パス名を指定すればよい。

“TopLevelDirectory/2ndLevelDirectory”

 なお、一度のCreateDirectoryメソッド呼び出しで、パラメータのパス名に指定されたディレクトリおよびすべてのサブ・ディレクトリが作成される(上記の記述例で「TopLevelDirectory」が存在しない場合には、「TopLevelDirectory」と「2ndLevelDirectory」が作成される)。このため、1つ1つのディレクトリごとにCreateDirectoryメソッドを何度も呼び出す必要はない。

分離ストレージ・ディレクトリでのファイルの作成

 次に、階層形式のディレクトリの中に分離ストレージ・ファイルを作成してデータを書き込んだり、読み込んだりするには、前掲のTIPSで説明したIsolatedStorageFileStreamオブジェクトを生成(new)する際のコンストラクタで、その第1パラメータに分離ストレージ・ディレクトリのパス名を含めたファイル・パス名を指定すればよい。

 例えば、上記の例の「TopLevelDirectory/2ndLevelDirectory」の中に「FileName.txt」というファイルを作成する場合には、次のようなファイル・パス名を指定する。

“TopLevelDirectory/2ndLevelDirectory/FileName.txt”

分離ストレージ・ディレクトリを活用するサンプル・プログラム

 それでは、実際に分離ストレージ・ディレクトリを作成して、その中に分離ストレージ・ファイルを作成するサンプル・プログラムを作成してみよう。下記のコードは、ここまでに説明した例を実際にコードにしたものだ(太字部分が本TIPSで紹介した内容)。

using System;
using System.IO;
using System.IO.IsolatedStorage;

class Program
{
  static void Main()
  {
    // 分離ストレージ環境を取得
    IsolatedStorageFile isoStore =
      IsolatedStorageFile.GetUserStoreForDomain();

    // 分離ストレージ・ディレクトリを作成
    isoStore.CreateDirectory(
      "TopLevelDirectory/2ndLevelDirectory");

    // 分離ストレージ・ディレクトリでファイルを作成
    IsolatedStorageFileStream isoStream =
      new IsolatedStorageFileStream(
      "TopLevelDirectory/2ndLevelDirectory/TestStore.txt",
      FileMode.OpenOrCreate,
      FileAccess.Write,
      isoStore);

    // ストリーム経由でデータを書き込む
    using (StreamWriter writer = new StreamWriter(isoStream))
    {
      writer.WriteLine("データを書き込みました!");
    }

    // ストリームを閉じる
    isoStream.Close();

    // 分離ストレージ環境を解放

    isoStore.Dispose();
  }
}
Imports System.IO
Imports System.IO.IsolatedStorage

Module Module1

  Sub Main()
    ' 分離ストレージ環境を取得
    Dim isoStore As IsolatedStorageFile = _
      IsolatedStorageFile.GetUserStoreForDomain()

    ' 分離ストレージ・ディレクトリを作成
    isoStore.CreateDirectory( _
      "TopLevelDirectory/2ndLevelDirectory")

    ' 分離ストレージ・ディレクトリでファイルを作成
    Dim isoStream As New IsolatedStorageFileStream( _
      "TopLevelDirectory/2ndLevelDirectory/TestStore.txt", _
      FileMode.OpenOrCreate, _
      FileAccess.Write, _
      isoStore)

    ' ストリーム経由でデータを書き込む
    Dim writer As New StreamWriter(isoStream)
    writer.WriteLine("データを……")
    writer.WriteLine("書き込みました!")
    writer.Close()

    ' ストリームを閉じる
    isoStream.Close()

    ' 分離ストレージ環境を解放
    isoStore.Dispose()
  End Sub

End Module
分離ストレージ・ディレクトリを活用するサンプル・プログラム(上:C#、下:VB)
太字部分が本TIPSで紹介した内容。

分離ストレージ・ディレクトリの削除

 最後に作成した分離ストレージ・ディレクトリを削除する方法を示しておこう。

 これにはIsolatedStorageFileオブジェクトのDeleteDirectoryメソッドを呼び出すだけである。DeleteDirectoryメソッドは(先ほどのCreateDirectoryメソッドと同様に)そのパラメータにファイル・パス名を受け取る。

 DeleteDirectoryメソッドの使い方は、先ほどのCreateDirectoryメソッドを単に置き換えるだけでOKだ。サンプル・プログラムを書いてもほとんど変わらないので割愛する。

 実際にDeleteDirectoryメソッドを使う際の注意点を1つ。分離ストレージ・ディレクトリ内に分離ストレージ・ファイルが存在する場合は、ディレクトリの削除に失敗してしまう。従って、メソッドを呼び出す前に、そのディレクトリにあるすべてのファイルを削除しておかなければならない。分離ストレージ・ファイルの削除方法は、前掲のTIPSで説明している。

 今回説明した「分離ストレージ・ディレクトリを活用するサンプル・プログラム」では、ディレクトリの有無をチェックせずに作成する仕様になっているが(ディレクトリが存在するときにCreateDirectoryメソッドを呼び出してもエラーにはならない)、「ディレクトリが存在するかどうかをちゃんとチェックしたうえでディレクトリを作成したい」という場合には、ディレクトリ名を列挙すればディレクトリの有無を調べることが可能だ。ディレクトリ名を列挙したり、ファイル名を列挙したりする方法については、後日あらためて紹介する。End of Article

カテゴリ:クラス・ライブラリ 処理対象:分離ストレージ
使用ライブラリ:IsolatedStorageFileクラス(System.IO.IsolatedStorage名前空間)
使用ライブラリ:IsolatedStorageFileStreamクラス(System.IO.IsolatedStorage名前空間)
使用ライブラリ:StreamWriterクラス(System.IO名前空間)
使用ライブラリ:StreamReaderクラス(System.IO名前空間)
使用ライブラリ:FileMode列挙体(System.IO名前空間)
使用ライブラリ:FileAccess列挙体(System.IO名前空間)
関連TIPS:分離ストレージを活用するには?

この記事と関連性の高い別の.NET TIPS
すべての分離ストレージ環境をクリーンアップするには?
分離ストレージを活用するには?
ディレクトリを作成/削除/リネーム/移動するには?
分離ストレージの容量を調べるには?
ファイルやディレクトリの一覧を取得するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間