はじめに
Windows PowerShellでテキストファイルを取り扱うには、標準のコマンドレットであるAdd-Content, Get-Content, Set-Contentなどを使用します。これ以外にも.NET Frameworkのクラスを利用することが可能です。
今回はStreamReader
(ファイルの読み込み)クラスとStreamWriter
(ファイルの書き込み)クラスを通して、.NET Framworkオブジェクトの操作とファイル操作について学んでいきたいと思います。
ファイルの読み込み
.NET Frameworkのクラスでファイル読み込みを行うには、StreamReader
クラスを使用します。
StreamReader
クラスは直接利用することはできないため、下記のようにNew-Objectコマンドレットを使用してインスタンスを作成する必要があります。
PS> $sr = New-Object System.IO.StreamReader("C:\Work\Test1.txt")
エンコーディングを指定してファイルを読み込む場合には、下記のようにしてインスタンスを作成します。
PS> $sr = New-Object System.IO.StreamReader("C:\Work\Test1.txt", [System.Text.Encoding]::UTF8)
インスタンスを作成した後は、変数$sr
を通してStreamReader
クラスのメソッドやプロパティにアクセスすることができます。エンコーディングに指定できる値については、MSDNの『Encodingプロパティ』を参照ください。またStreamReader
クラスにはこのほかのコンストラクタもありますので、MSDNの『StreamReaderコンストラクタ』を参照ください。
現在のエンコードを確認する
CurrentEncoding
プロパティにアクセスすると、現在のエンコードを確認することができます。
PS> $sr.CurrentEncoding
結果を見ると複数のプロパティ値が表示されていることがわかります。
エンコードを確認できるプロパティはいくつかありますが、この中のEncodingName
を見るとこのファイルのエンコードがUnicode(UTF-8)であることが分かります。下記のように入力すれば、EncodingName
だけを表示させることができます。
PS > $sr.CurrentEncoding.EncodingName
このように、プロパティやメソッドがさらにメンバ(プロパティやメソッド)を持っている場合にはドット(.)で数珠つなぎにしてアクセスすることができます。
ここで作成したStreamReader
クラスのインスタンス変数$sr
に対して、Tab補完を行うことができます。
コマンドライン上で「$sr.」と入力して[Tab]キーを押していくとアクセス可能なメンバが表示されます。
試しに「$sr.C」まで入力した状態で[Tab]キーを押していくと 「$sr.CurrentEncoding, $sr.Close(, $sr.CreateObjRef(」と表示が切り替わっていきます。
ストリームを閉じる
StreamReader
は、使用後に必ずClose
メソッドを実行して閉じる必要があります。この操作を忘れると、StreamReader
で開いたファイルはPowerShellがつかんだままとなってしまいます。PowerShellを終了すればファイルは解放されますが、使用後は必ずClose
メソッドを実行するようにしてください。
PS> $sr.Close()