web-dev-qa-db-ja.com

ファイルIO、これはPowershellのバグですか?

私はPowershellに次のコードを持っています

$filePath = "C:\my\programming\Powershell\output.test.txt"

try
{
    $wStream = new-object IO.FileStream $filePath, [System.IO.FileMode]::Append, [IO.FileAccess]::Write, [IO.FileShare]::Read

    $sWriter = New-Object  System.IO.StreamWriter $wStream

    $sWriter.writeLine("test")
 }

エラーが発生し続けます:

「FileStream」の引数「1」を値「[IO.FileMode] :: Append」で「System.IO.FileMode」と入力できません:「値「[IO.FileMode] :: Append」を変換できません列挙値が無効なため、「System.IO.FileMode」と入力します。次の列挙値のいずれかを指定して、再試行してください。可能な列挙値は、「CreateNew、Create、Open、OpenOrCreate、Truncate、Append」です。

私はC#で同等のものを試しました、

    FileStream fStream = null;
    StreamWriter stWriter = null;

    try
    {
        fStream = new FileStream(@"C:\my\programming\Powershell\output.txt", FileMode.Append, FileAccess.Write, FileShare.Read);
        stWriter = new StreamWriter(fStream);
        stWriter.WriteLine("hahha");
    }

それはうまくいきます!

PowerShellスクリプトの何が問題になっていますか?ところで、私はPowerShellで実行しています

Major  Minor  Build  Revision
-----  -----  -----  --------
3      2      0      2237
9
user1866880

別の方法は、値の名前だけを使用して、PowerShellにそれをターゲットタイプにキャストさせることです。

New-Object IO.FileStream $filePath ,'Append','Write','Read'
19
Shay Levy

New-Objectコマンドレットを使用し、ターゲット型コンストラクターがパラメーターを受け取る場合は、(New-Objectの)-ArgumentListパラメーターを使用するか、パラメーターを括弧で囲む必要があります。コンストラクターをパラメーターでラップすることをお勧めします。 :

# setup some convenience variables to keep each line shorter
$path = [System.IO.Path]::Combine($Env:TEMP,"Temp.txt")
$mode = [System.IO.FileMode]::Append
$access = [System.IO.FileAccess]::Write
$sharing = [IO.FileShare]::Read

# create the FileStream and StreamWriter objects
$fs = New-Object IO.FileStream($path, $mode, $access, $sharing)
$sw = New-Object System.IO.StreamWriter($fs)

# write something and remember to call to Dispose to clean up the resources
$sw.WriteLine("Hello, PowerShell!")
$sw.Dispose()
$fs.Dispose()

New-Objectコマンドレットオンラインヘルプ: http://go.Microsoft.com/fwlink/?LinkID=113355

6
Goyuix

さらに別の方法は、列挙型を親で囲むことです。

$wStream = new-object IO.FileStream $filePath, ([System.IO.FileMode]::Append), `
    ([IO.FileAccess]::Write), ([IO.FileShare]::Read)
3
mousio

ログファイルまたはテキストファイルに書き込むことが目標である場合、PowerShellでサポートされているコマンドレットを試してこれを実現できますか?

Get-Help Out-File -Detailed
0
HungryHippos