要在数据库中存储word文件免不了要在word文件和二进制数据之间做转换,于是我又手痒写类了。虽然只写了word文件的转换,其实其他各种文件都可以类比下。
using System;
using System.Data;
using System.Windows.Forms;
using System.IO;
public class WordToByte
{
/// <summary>
/// 寻找Word文件并获得其二进制文件流
/// </summary>
/// <returns></returns>
static public byte[] GetByte()
{
OpenFileDialog openDialog = new OpenFileDialog();
openDialog.Filter = "word文件(*.DOC;*.DOCX)|*.DOC;*.DOCX|所有文件(*.*)|*.*";
if (openDialog.ShowDialog() != DialogResult.OK)
{
return null;
}
FileStream fs = new FileStream(openDialog.FileName, FileMode.Open);
fs.Position = 0;
byte[] word = new byte[fs.Length];
fs.Read(word, 0, (int)fs.Length);
fs.Close();
return word;
}
/// <summary>
/// 用指定二进制数据流生成Word文件,文件名不需要带后缀
/// </summary>
/// <param name="data"></param>
/// <param name="文件名"></param>
/// <param name="打开word文件"></param>
static public void GetWordFile(byte[] data, string 文件名, bool 打开Word文件)
{
SaveFileDialog saveDialog = new SaveFileDialog();
saveDialog.DefaultExt = "doc";
saveDialog.Filter = "Word文件|*.doc";
saveDialog.FileName = 文件名;
if (saveDialog.ShowDialog() != DialogResult.OK)
{
return;
}
FileStream fs = new FileStream(saveDialog.FileName, FileMode.CreateNew);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(data, 0, data.Length);
bw.Close();
fs.Close();
if (打开Word文件 && File.Exists(saveDialog.FileName))
{
System.Diagnostics.Process.Start(saveDialog.FileName); //打开Word文件
}
}
/// <summary>
/// 用指定二进制数据流生成Word文件到指定路径(如“D:\”),文件名需要带后缀
/// </summary>
/// <param name="data"></param>
/// <param name="文件名"></param>
/// <param name="Path"></param>
/// <param name="打开word文件"></param>
static public void GetWordFile(byte[] data, string 文件名, string Path, bool 打开Word文件)
{
string Directory = Path + 文件名;
FileStream fs = new FileStream(Directory, FileMode.CreateNew);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(data, 0, data.Length);
bw.Close();
fs.Close();
if (打开Word文件 && File.Exists(Directory))
{
System.Diagnostics.Process.Start(Directory); //打开Word文件
}
}
}
既然是unicode编码,有时候就爱用中文命名。不适应的请见谅。