0

FileStream変数にバイト ドキュメントがあり、それを に使用するために に入れたいと考えていStreamReaderます。

私はこれを行うことができますか?

パスを使用しているのを見ましたFileStreamが、バイト ドキュメントを読み取る方法はありますか?

もちろん、これmyByteDocumentはパスではないため、機能しません。

file = new FileStream(myByteDocument, FileMode.Open, FileAccess.Read, FileShare.Read);

reader= new StreamReader(file); 
reader.BaseStream.Seek(0, SeekOrigin.Begin);
string fullText= "";
while (reader.Peek() > -1) 
{
    fullText+= reader.ReadLine();
}
reader.Close();

myByteDocument は次のように取得されます。

DataRow row = vDs.Tables[0].Rows
byte[] myByteDocument = (byte[])row.ItemArray[0];

私はドキュメントを読み、それを文字列に入れ、その一部を置き換えます。そして、すべて置換した後、fullText変数を使用して新しいドキュメントを作成sw.write(fullText)swますStreamWriter

そのため、パスを知らなくても、バイトドキュメントを直接使用してファイルを読みたいと思います。私はこれを行うことができますか?

よくわからない場合は、ためらわずに言ってください。

4

2 に答える 2

3

MemoryStreamの代わりにクラスを見る必要がありますFileStream。パスを知らなくてもファイルを読み取るために必要な機能を提供する必要があります (提供されるmyByteDocumentのはバイト配列です)。

var file = new MemoryStream(myByteDocument);

基本的に、使用しようとしていた FileStream コンストラクターを MemoryStream コンストラクターに置き換えるだけで、同じコードを使用できます。

string fullText= "";

using(var file = new MemoryStream(myByteDocument))
using(var reader = new StreamReader(file))
{
    reader.BaseStream.Seek(0, SeekOrigin.Begin);
    while (!reader.EndOfStream)
    {
        fullText += reader.ReadLine();
    }
}

usingファイルアクセスのブロックも追加したことに注意してください。reader.Close()これは、メソッドを呼び出すだけでは発生しない例外が発生した場合でも、リソースのクリーンアップを確実にするため、単に呼び出すよりもはるかに望ましいClose()方法です。

于 2013-04-16T13:03:41.560 に答える
1

必要なのは、バイト配列を文字列に変換し、必要なものを置き換えて、最終結果を書き込むことです。これを行うために StreamReaders や writer も必要ありません。

この投稿を見てください: バイト[]を文字列に変換する方法は?

ここには、ドキュメントを文字列に変換するさまざまな方法があります。答えとして受け入れられたものは次のとおりです。

string result = System.Text.Encoding.UTF8.GetString(myByteDocument)

すべての置換が完了したら、次のような方法で文字列をファイルに保存します (最も簡単な方法):

File.WriteAllText(path, result);
于 2013-04-16T13:02:51.160 に答える