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;
}

当我打电话给我的服务器时,我什么也得不到。当我对图像/.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 回答