C#の文字列を含むファイルを(先頭に)追加したいと思います。現在、ファイルのコンテンツを文字列と元のコンテンツに置き換えています。 ストリームライターがエンコードされた文字を台無しにするので、私はこれをしたくありません。
(各文字の)元のエンコーディングを変更せずにテキストファイルをプリペンドする方法はありますか?
方法があります。
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
次に、そのエンコーディングをストリームライターで使用できます。
安全に使用できますか?
このページの下部にあるコードを使用すると、ファイルを読み込んでエンコードを保持し、同じエンコードを使用して書き戻すことができます。これを変更して、必要なことを実行できるはずです。