PowerShell でバイナリコピー
コマンドプロンプトで言うところの copy /b を PowerShell でやってみます。簡易版コピーと FileStream を使ったコピーの2種類をご紹介します。この手のサンプルはネットには大量にころがってるのですが、意外と検索し難かったので(検索の仕方の問題という話も、、、)メモ代わりに残しておきます。
簡易版コピー
指定されたファイルを一旦全て読み込んで、一気に書き込むという方法です。超簡単ですが、サイズの大きなファイルでは死んでしまうというコピー方法です。
# ファイル名定義
$src="D:\TEMP\binfile1"
$dst="D:\TEMP\binfile2"
# バイナリコピー
$wbuf = [System.IO.File]::ReadAllBytes($src);
[System.IO.File]::WriteAllBytes($dst,$wbuf);
FileStream を使ったコピー
FileStream を使って指定されたサイズを読み込みながら、そのまま書き込んで行く方法です。サイズが大きなファイルでも大丈夫かと。
# ファイル名定義
$src="D:\TEMP\binfile1"
$dst="D:\TEMP\binfile2"
# コピーサイズ
$chunk=8192
# ファイルオープン
$reader = [System.IO.File]::OpenRead($src)
$writer = [System.IO.File]::OpenWrite($dst)
# バイナリコピー
$wbuf = New-Object byte[]( $chunk )
while( $true )
{
# 対象ファイルを指定サイズ読み込み
$size = $reader.Read($wbuf,0, $chunk)
if ( $size -eq 0 )
{
break;
}
# 書き込み
$writer.write($wbuf,0,$size)
}
$reader.Close()
$writer.Close()
ディスカッション
コメント一覧
まだ、コメントがありません