2016-12-20 10 views
1

PowerShellを使用してファイルを暗号化および復号化しようとしています。この場合、私は.docxファイルで作業しています。ファイルを暗号化した後、解読関数に渡して解読した後、開こうとするとファイルが破損します。PowerShellを使用して、ファイルから末尾の "0d 0a"バイトを削除します。

ただし、16進エディタを使用して元のファイルと復号化された.docxファイルを比較した後、唯一の違いは、復号化された.docxファイルの末尾に2バイトの "0d 0a"があることです。

これはPowerShellの "Set-Content"コマンドの結果だと思います。 (Out-Fileコマンドではさらに悪い結果が得られます)

ただし、改行と復帰改行を保存したいので、すべての改行と改行バイトを置き換えることはできません資料。

復号化され、すでに書き込まれた.docxファイルの "0d 0a"の末尾のバイトのみを削除する方法はありますか?

+0

'セット内容-NoNewline' – PetSerAl

+2

あなたの質問を編集し、[mcve]を提供してください。 – JosefZ

+0

@PetSerAl答えてくれてありがとう、私は-NoNewline関数を持たないPowerShell v2を使用していますが、別の方法で問題を解決できますか? – r3dfl4g

答えて

2

あなたの例を見ることなく、余分なCRLFがどこから来ているかを知ることは不可能です。コードを調べてどこから来たのかを確認し、System.IO.Fileクラスのような別のルートを使用することをお勧めします。簡単な解決策を探しているだけの場合は、ファイルを読み込んで最後の4バイトを取り除き、バイト配列を同じファイルに上書きして上書きすることができます。これはバンダイですが、うまくいくはずです。

#read in all contents 
$bytes = [system.io.file]::ReadAllBytes("somefile.docx") 
#write out all bytes except the last 4 
#0 based so the last byte is at position length-1 then an additional 4 bytes 
[System.IO.File]::WriteAllBytes("somefile.docx",$bytes[0..($bytes.length-5)]) 
+0

ありがとうございます!これはうまくいった!しかし、-5の代わりに、-5が2つの余分なバイトを削除していたので、-3に変更しました。 – r3dfl4g

関連する問題