3

メモリ内のファイルを変更する必要があります。現在、ファイルストリームとバイナリリーダーを使用して、ファイルをメモリに読み込んでbyte[]に変換しています。

メモリ内のそのファイルを変更し、byte []を文字列に変換し、変更を加え、Encoding.GetBytes()を実行するための最良のアプローチは何でしょうか。または、最初にFile.ReadAllText()を使用してファイルを文字列として読み取り、次にEncoding.GetBytes()を使用しますか?または、警告なしで機能するアプローチはありますか?

特別なアプローチはありますか?ファイル内の特定のテキストを、追加の文字または置換文字列、数100,000のファイルに置き換える必要があります。信頼性は効率よりも優先されます。ファイルはHTMLのようなテキストであり、バイナリファイルではありません。

4

4 に答える 4

2

を使用してファイルを読み取りFile.ReadAllText()、変更してから実行しますbyte[] byteData = Encoding.UTF8.GetBytes(your_modified_string_from_file)。ファイルが保存されたときのエンコーディングを使用してください。これにより、の配列が得られますbyte[]byte[]次のようなストリームに変換できます。

MemoryStream stream = new MemoryStream();
stream.Write(byteData, 0, byteData.Length);

編集: API のメソッドの1つがAddバイト配列を取ることができるように見えるので、ストリームを使用する必要はありません。

于 2012-04-26T15:54:17.680 に答える
1

最初にバイトを読み取ることで、間違いなく自分自身で物事を難しくしています。StreamReaderを使用するだけです。おそらく、ReadLine()を使用して、一度に1行ずつ処理することで解決できます。これにより、特にその数のファイルを操作している場合に、アプリのメモリ使用量を大幅に減らすことができます。

using (var reader = File.OpenText(originalFile))
using (var writer = File.CreateText(tempFile))
{
    string line;
    while ((line = reader.ReadLine()) != null) 
    {
        var temp = DoMyStuff(line);
        writer.WriteLine(temp);
    }
}

File.Delete(originalFile);
File.Move(tempFile, originalFile);
于 2012-04-26T15:34:31.047 に答える
1

ファイルのサイズに基づいて、私はFile.ReadAllTextそれらを読んだり、それらを書いたりするために使用しFile.WriteAllTextます。これにより、電話をかけCloseたりDispose、読み取りまたは書き込みを行ったりする必要がなくなります。

于 2012-04-26T15:38:55.980 に答える
0

通常、テキストファイルをバイナリレベルで読み取ることは望ましくありません。ファイルでFile.ReadAllText()使用されている正しいエンコーディングを使用して提供するだけです(そのためには過負荷があります)。ファイルエンコーディングがUTF8またはUTF32の場合、通常、メソッドは正しいエンドコーディングを自動的に検出して使用できます。書き戻しにも同じことが当てはまります。UTF8でない場合は、必要なエンコーディングを指定してください。

于 2012-04-26T15:31:25.433 に答える