天天看点

winform下word文件与byte[]互转

    要在数据库中存储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编码,有时候就爱用中文命名。不适应的请见谅。