C#直接读取WORD二进流并打开WORD文件,不将java二进制流转图片成的WORD文件保存在本地依然打开

Mongodb存储读取Word文档
在为人事系统做操作日志功能时,为了保证已经打印的信函可以还原,需要在每次打印信函时记录Word信函的内容。
SQL Server只能记录信函的文字内容,那信函的页面布局、字体格式等其他内容如何存储呢?此时Mongodb闪亮登场,由于MongoDB的文档结构为BJSON格式(BJSON全称:Binary JSON),而BJSON格式本身就支持保存二进制格式的数据,因此可以把文件的二进制格式的数据直接保存到MongoDB的文档结构中。取的时候再以二进制格式取,这样文档就能实现无损保存。
下面是我已经验证成功,存储Word到Mongo,然后从Mongo读取Word的代码,在此和大家分享分享。
using System.Collections.G
using System.D
using System.D
using System.L
using System.T
using System.Windows.F
using System.IO;
using MongoDB.B
using MongoDB.D
namespace Mongodb
public partial class Form1 : Form
public Form1()
InitializeComponent();
//数据库连接字符串
const string strconn = &mongodb://127.0.0.1:27017&;
//数据库名称
const string dbName = &test&;
void Init()
//创建数据库链接
server = MongoDB.Driver.MongoServer.Create(strconn);
//获得数据库
db = server.GetDatabase(dbName);
private void btnSave_Click(object sender, EventArgs e)
SaveDocToMongo(@&d:\quwenzhe.docx&);
private void btnShow_Click(object sender, EventArgs e)
GetDocFromMongo(@&E:\newquwenzhe.doc&);
/// &summary&
/// 保存Word到Mongo
/// &/summary&
/// &param name=&filename&&需要保存的文件名&/param&
private void SaveDocToMongo(string filename)
byte[] byteDoc = File.ReadAllBytes(filename);
BsonDocument doc = new BsonDocument();
doc[&id&] = &1&;
doc[&content&] = byteD
MongoCollection col = db.GetCollection(&doc&);
col.Save(doc);
/// &summary&
/// 将Mongo中的Word保存到本地
/// &/summary&
/// &param name=&filename&&保存到本地的文件名&/param&
private void GetDocFromMongo(string filename)
MongoCollection col = db.GetCollection(&doc&);
var query = new QueryDocument { { &id&, &1& } };
var result = col.FindAs&BsonDocument&(query);
byte[] buff = (byte[])((BsonDocument)result.ToList()[0]).GetValue(&content&);
FileInfo fi = new FileInfo(filename);
fs = fi.OpenWrite();
fs.Write(buff, 0, buff.Length);
fs.Close();
执行完存储操作后,大家可以在MongoVUE中查看存储的二进制数据,如下图所示:
下载地址:/s/1pJ5DTer。
好了,时间不早了,我得小憩一下,准备下午的软考,谢谢大家观看。我的电脑上有个文件是word形式的,但是现在打不开,显示的是乱码,这个文件很有用,怎么办呢?_百度知道
我的电脑上有个文件是word形式的,但是现在打不开,显示的是乱码,这个文件很有用,怎么办呢?
提问者采纳
:删除格式信息  word文档段落符号记录着全篇文档格式信息删除些格式信息恢复变乱码文件  1、打损坏文档单击工具/选项菜单选择编辑标签取消使用智能段落选择范围复选框勾选单击 按钮修复文件  2、选定段落符外全部内容些内容粘贴复制新word文件即 二:替换格式  损坏Word文档存另种格式  1、打损坏文档单击文件/另存菜单 保存类型列表选择RTF格式单击保存按钮并关闭word  2、打刚才保存RTF格式文件再使用 另存文件重新保存Word文档现打word文件发现文件已经恢复  转换rtf格式文件仍能恢复文件再转换纯文本格式(*.txt)再转换Word格式转换txt文件候其图片等信息丢失掉
源:百度经验
提问者评价
谢谢你的耐心解答,但是,答案不是针对我这个问题的,再次感谢,我决定凭借记忆再打一份!~~~
其他类似问题
为您推荐:
其他5条回答
先确定WORD文档.版本问题,低版本WORD程序,2003打用WORD2007等高版本保存WORD文档.强行打能乱码.所再看看WORD文档种情况.
先看一下word文件属性是2003的还是2007的,如果的电脑上安装的是office2003,文件是2007的是打不开的,会有乱码,如果是这样的情况可以下一下2007的兼容包或是安装office2007。
你的看他的扩展名,也可能是二进制文件,你的系统默认是用word打开,但不一定是word文件。
请将文件截图
office版本过旧,建议用2007看看,应该能解决
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁你上回帮我解决的“c#读取access中的ole长二进制数据,然后在word中显示”还是不太懂,能具体些吗 ?_百度知道
你上回帮我解决的“c#读取access中的ole长二进制数据,然后在word中显示”还是不太懂,能具体些吗 ?
提问者采纳
用代码OLE字段文件读存*.doc文件调用外部程序直接打述*.doc文件调用外部程序C#用: System.Diagnostics.Process.Start(&c:\\abc.doc&);
提问者评价
谢谢了,我回去再试试。你那边有没有现成的实例,我是做毕业设计遇到了这问题,想有个例子参考一下。
来自:求助得到的回答
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C#保存和读取Word文件到Sql Server数据库_C#教程
您的当前位置:
C#保存和读取Word文件到Sql Server数据库
在Sql Server中存储、读写Word文件,需要将指定表字段添加为Image类型,示例表结构为:
CREATE TABLE CONTRACTS (
ID VARCHAR (50),
CONTRACT_FILE IMAGE
CONTRACT_FILE字段就是要存储Word文件的字段,在存储前,有一个小插曲,你需要将Word文件转换为byte数组,可参考以下代码实现:
//将文件转换为byte数组
public static byte[] File2Bytes(string fileName)
FileStream fs = new FileStream(fileName,FileMode.OpenOrCreate, FileAccess.Read);
byte[] fileDatas = new byte[fs.Length];
fs.Read(fileDatas, 0, System.Convert.ToInt32(fs.Length));
fs.Close();
return fileD
接下来就是将转换后的byte[]数组存储到SqlServer的对应字段中,具体实现代码可看如下代码段:
//将文件存储到数据库
public bool UpdateContractFile(string id, byte[] fileBytes)
string sql = &UPDATE CONTRACTS SET CONTRACT_FILE=@CONTRACT_FILE WHERE ID=@ID&;
using (SqlConnection conn = new SqlConnection(this.m_DataAccess.ConnectString))
conn.Open();
using (SqlCommand cmd = new SqlCommand())
cmd.Connection =
mandText =
cmd.Parameters.Clear();
cmd.Parameters.Add(new SqlParameter(&@CONTRACT_FILE&, SqlDbType.Image));
cmd.Parameters[&@CONTRACT_FILE&].Value = fileB
cmd.Parameters.Add(new SqlParameter(&@ID&, SqlDbType.VarChar));
cmd.Parameters[&@ID&].Value =
return cmd.ExecuteNonQuery() & 0 ? true :
同时,因之前转换了数据类型,所以从数据库中读取Word文件时,要先将Image类型的字段转换为bytes[],代码如下:
//通过ID获取文件byte数组
public byte[] GetContractFile(string id)
string sql = &SELECT CONTRACT_FILE FROM CONTRACTS WHERE ID='{0}'&;
sql = string.Format(sql, id);
object contractF
contractFile = this.m_DataAccess.ExecuteScalar(sql);
if (contractFile == null)
return new byte[0];
return (byte[])contractF
在获取到文件的byte[]后,将该文件再通过文件流存储为Word文件,以下代码可实现此功能:
//将byte[]数组存储为Word文件
byte[] fileBytes = this.m_ContractsBusiness.GetContractFile(id);
if (fileBytes.Length == 0)
XMessageBox.ShowError(&未找到合同文件!&);
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = &Word文件(*.doc)|*.doc&;
if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
string saveFileName = sfd.FileN
int arraysize = new int();
arraysize = fileBytes.GetUpperBound(0);
FileStream fs = new FileStream(saveFileName, FileMode.OpenOrCreate, FileAccess.Write);
fs.Write(fileBytes, 0, arraysize);
fs.Close();
if (XMessageBox.ShowQuestion(&文件存储成功,是否立即打开文件?&) ==
System.Windows.Forms.DialogResult.Yes)
Process.Start(saveFileName);
catch (Exception ex)
XMessageBox.ShowError(&操作失败!&);
上面的几段代码只是核心代码,并不是完整的代码段,用时候要看清,自己再修改下。}

我要回帖

更多关于 php 二进制流转字符串 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信