zoukankan      html  css  js  c++  java
  • C# IO流的操作(二)

    文件在操作系统中是以二进制(01)的形式保存到磁盘上的,在C#程序当中,我们可以通过读取流将文件读取到byte[]当中(读到内存中),也可以通过写入流将byte[]写入文件(保存到磁盘上)。下面将演示一例文件与数据库结合的示例——将文件保存到数据库,再从数据库还原为文件。

    写入文件到数据库部分代码:

     /// <summary>
     /// 写入按钮事件
     /// </summary>
     private void button1_Click(object sender, EventArgs e)
     {
         //将文件读取到字节数组
         FileStream fs = new FileStream("test.docx", FileMode.Open);
         byte[] bytes = new byte[(int)fs.Length];
         fs.Read(bytes, 0, bytes.Length);
    
         //保存到数据库
         using (SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=123456;database=test"))
         {
             conn.Open();
             string sql = "insert into 文件表([file]) values(@file)";
             SqlCommand cmd = new SqlCommand(sql, conn);
             cmd.Parameters.Add(new SqlParameter("@file", bytes));
             int i = cmd.ExecuteNonQuery();
             if (i > 0)
             {
                 MessageBox.Show("文件写入成功");
             }
         }
     }

    读取数据库byte[]到本地磁盘文件的代码:

    /// <summary>
    /// 读取按钮事件
    /// </summary>
    private void button2_Click(object sender, EventArgs e)
    {
        using (SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=123456;database=test"))
        {
            conn.Open();
            string sql = "select [file] from 文件表";
            SqlCommand cmd = new SqlCommand(sql, conn);
    
            SqlDataReader sdr = cmd.ExecuteReader();
            if (sdr.Read())
            {
                byte[] bytes = (byte[])sdr["file"];
    
                //直接写入字节数组到文件(写法1)
                File.WriteAllBytes("test-new.docx", bytes);
                MessageBox.Show("文件保存成功");
    
                //将字节数组读取到流,然后用流写入文件(写法2)
                FileInfo file = new FileInfo("test-new.docx");
                FileStream fs = file.OpenWrite();
                fs.Write(bytes, 0, bytes.Length);
                fs.Close();
    
                //将字节数组写入内存流,直接从内存流中加载图片显示
                MemoryStream ms = new MemoryStream();
                ms.Write(bytes, 0, bytes.Length);
                this.pictureBox1.Image = Image.FromStream(ms);
            }
            sdr.Close();
        }
    }

    说明:

    1)数据库file字段是sql关键字,所以用[]括号括起来[file]。此外file字段要设置为image类型。

    2)上述的代码部分演示了保存本地word文件到数据库,再从数据库还原为word文档的过程,对于图片(包括gif动画)也是一样的操作方式。

  • 相关阅读:
    Saltstack module acl 详解
    Saltstack python client
    Saltstack简单使用
    P5488 差分与前缀和 NTT Lucas定理 多项式
    CF613D Kingdom and its Cities 虚树 树形dp 贪心
    7.1 NOI模拟赛 凸包套凸包 floyd 计算几何
    luogu P5633 最小度限制生成树 wqs二分
    7.1 NOI模拟赛 dp floyd
    springboot和springcloud
    springboot集成mybatis
  • 原文地址:https://www.cnblogs.com/guwei4037/p/8074470.html
Copyright © 2011-2022 走看看