我试图将.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的内容类型使用相同类型的方法时,它可以正常工作。
答案 0 :(得分: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。相反,您应该以块的形式读取文件,以块的形式写入响应流。
有关如何操作的指导,请参阅此答案