C# で、元のエンコードを変更せずにファイルの先頭にテキスト文字列を追加する方法
-
19-09-2019 - |
質問
C#で文字列をファイルの先頭に追加したいと考えています。現在、ファイルの内容を文字列と元の内容に置き換えているだけです。ストリームライターはエンコードされた文字を台無しにしてしまうので、これはやりたくないです。
元のエンコーディング(各文字)を変更せずにテキストファイルの先頭に追加する方法はありますか。
方法があるはずだ。
解決
他のヒント
テキストエンコーディングって面白いですね. 。エンコードされたものとして解釈されるコードを作成している場合 キャラクター, 、コンパイラは、特定の文字を表すためにバイトがどのように配置されるべきかを伝える必要があります (または想定するかもしれません)。プログラムが作業するファイルのエンコーディングに依存しない場合、そのファイル内のバイト配列をどのように解釈するかをコンパイラーにどのように指示するつもりですか?
文字を一連の流れとして読むと考えることもできます。 バイト の流れの代わりに キャラクター これらのバイトを解釈するようにコンパイラーに指示する方法がわからない場合 (つまり、実行時にどのようなエンコーディングが使用されるかはわかりません)。その場合、ファイルの先頭に追加するために選択した基本文字が、どのエンコーディングでも普遍的に認識されることを期待する必要があります。これは追加するからです バイト そしてそうではありません キャラクター ファイルの先頭に。
バイトをデコードせずにファイルを読み取るだけです。そして、ヘッダーのエンコーディングを選択する必要があります。状況では ASCII が最も安全な選択のようです。
const String fileName = "test.file";
const String header = "MyHeader";
var headerBytes = Encoding.ASCII.GetBytes(header);
var fileContent = File.ReadAllBytes(fileName);
using (var stream = File.OpenWrite(fileName))
{
stream.Write(headerBytes, 0, headerBytes.Length);
stream.Write(fileContent, 0, fileContent.Length);
}
コードはストリームを直接操作し、 TextReader
または TextWriter
(これは、次の抽象基本クラスです。 StreamReader
そして StreamWriter
)。を使用できます BinaryReader
そして BinaryWriter
配列の読み取りと書き込みだけではなく複雑なタスクを処理する必要がある場合に、ストリームへのアクセスを簡素化します。
私は、私は、ファイルの正しいエンコーディングを取得してみましょうどの本が見つかりました: http://www.personalmicrocosms.com/Pages/dotnettips.aspx? C = 15&T = 17 の
私はのStreamWriterでその符号化を使用することができます。
を使用することは安全ですか?