Im Get-ChildItemを使用してフォルダ内のファイルを読み取った後、各ファイルのlastwritetimeを取得して並べ替えます。Get-ChildItemを使用する場合、ファイルを閉じる必要がありますか?
lastwritetimeを取得した後にファイルを閉じる必要がありますか?
Im Get-ChildItemを使用してフォルダ内のファイルを読み取った後、各ファイルのlastwritetimeを取得して並べ替えます。Get-ChildItemを使用する場合、ファイルを閉じる必要がありますか?
lastwritetimeを取得した後にファイルを閉じる必要がありますか?
いいえこれは、ファイルの情報の一覧です。ストリームやロックが行われていません
すでに言及したように、答えはです。です。
ファイルシステムに対してGet-ChildItem
を使用する場合、それは実際にすべてのファイルを開かないことであることの理由 - それは、ファイルシステムでは約ファイルのメタデータを返す基本的なAPIを問い合わせ - そうに何のファイルハンドルがありません「閉じた」。
あなたの質問のコメントから、「私はPowerShellでシステムリソースの割り当てを管理する必要はないのですか?
PowerShellは.NETで動作し、.NETランタイムはガベージコレクションされます。メモリブロックがポインタによって参照されなくなった後のある時点(未定義)で、ガーベジコレクタが解放され、このプロセスを自分で管理することについて心配する必要はありません。
リソース割り当てがランタイムの外部にあり、管理する必要がある状況もありますが、.NETの通常のパターンは、アンマネージリソースに依存するクラスを定義するときにIDisposable
インターフェイスを実装することです。例はStreamReader
(テキストファイルを読むことができる)です。 PowerShellで
using(StreamReader reader = File.OpenText("C:\path\to\file.txt"))
{
// use reader in here
}
// at this point, reader.Dispose() has been called automatically
、そのような意味的な構築物はありません:C#
では、自動的に実行がこれは必須ですした範囲を離れると、そのようなオブジェクトを処分するusing
ディレクティブを使用することができます。基になる機能の開発 - このすべて例えばGet-Content
を呼び出すときにあなたから離れて隠されている。もちろん、
try {
$FileReader = [System.IO.File]::OpenText("C:\path\to\file.txt")
# user $FileReader here
}
finally {
if($FileReader -ne $null){
$FileReader.Dispose()
}
}
:多くの使い捨てのオブジェクトを割り当てることtry
/finally
ブロックでそれらをラップしているとき、私は通常、何をしますファイルシステム提供者は、パイプラインの実行が停止するまでにすでにオブジェクトを破棄しています。あなたがあなた自身のコマンドレットを書き、より「原始的」なタイプと対話したいときには、実際には、ファイルを直接
私はこれが
'は、Get-ChildItem'は「オープン」しませんあなたの混乱にいくつかの光を当てる願っています必要なのメタデータの基礎となるAPIを要求します_about_ファイル - 閉じられるものは何もありません –
いいえこれはファイルの情報の一覧です。ストリームやロックは行われません。 – ArcSet
@ MathiasR.Jessen - コメントとしてではなく、答えとして書く - 質問に対する正しい返答であることは間違いありません。 –