0

.dbファイルをバイナリに変換してWebサーバー全体にストリーミングできるようにしようとしています。私はC#にかなり慣れていません。私はオンラインでコードスニペットを見るところまで来ましたが、以下のコードが私を正しい軌道に乗せるかどうかはよくわかりません。一度読み取ったデータを書き込むにはどうすればよいですか?BinaryReaderファイル全体を自動的に開いて読み取るので、バイナリ形式で書き出すことができますか?

class Program
{
    static void Main(string[] args)
    {
        using (FileStream fs = new FileStream("output.bin", FileMode.Create))
        {
            using (BinaryWriter bw = new BinaryWriter(fs))
            {
                long totalBytes = new System.IO.FileInfo("input.db").Length;
                byte[] buffer = null;

                BinaryReader binReader = new BinaryReader(File.Open("input.db", FileMode.Open)); 
            }
        }
    }
}

編集:データベースをストリーミングするコード:

[WebGet(UriTemplate = "GetDatabase/{databaseName}")]
public Stream GetDatabase(string databaseName)
{
    string fileName = "\\\\computer\\" + databaseName + ".db";

    if (File.Exists(fileName))
    {
        FileStream stream = File.OpenRead(fileName);

        if (WebOperationContext.Current != null)
        {
            WebOperationContext.Current.OutgoingResponse.ContentType = "binary/.bin";
        }

        return stream;
    }

    return null;
}

サーバーに電話しても、何も返されません。これと同じタイプのメソッドをcontent-typeofimage / .pngに使用すると、正常に機能します。

4

1 に答える 1

2

投稿したコードが実際に行うのは、ファイルinput.dbをファイルoutput.binにコピーすることだけです。File.Copyを使用して同じことを達成できます。

BinaryReaderは、ファイルのすべてのバイトを読み込むだけです。バイナリデータを期待する出力ストリームにバイトをストリーミングするのに適した開始です。

ファイルに対応するバイトを取得したら、次のようにWebサーバーの応答に書き込むことができます。

using (BinaryReader binReader = new BinaryReader(File.Open("input.db", 
                                                 FileMode.Open))) 
{
    byte[] bytes = binReader.ReadBytes(int.MaxValue); // See note below
    Response.BinaryWrite(bytes);
    Response.Flush();
    Response.Close();
    Response.End();
}

注:コードbinReader.ReadBytes(int.MaxValue)は、概念を示すためだけのものです。大きなファイルをロードするとすぐにOutOfMemoryExceptionが発生する可能性があるため、本番コードでは使用しないでください。代わりに、ファイルをチャンクで読み込み、応答ストリームにチャンクで書き込む必要があります。

それを行う方法のガイダンスについては、この回答を参照してください

https://stackoverflow.com/a/8613300/141172

于 2012-08-07T16:55:02.350 に答える