文件在操作系统中是以二进制(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, , 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 > )
{
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, , bytes.Length);
fs.Close(); //将字节数组写入内存流,直接从内存流中加载图片显示
MemoryStream ms = new MemoryStream();
ms.Write(bytes, , bytes.Length);
this.pictureBox1.Image = Image.FromStream(ms);
}
sdr.Close();
}
}

说明:

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

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

C# IO流的操作(二)的更多相关文章

  1. Java---IO加强(3)-IO流的操作规律

    一般写关于操作文件的读取的几个通用步骤!!! 1.明确源和目的. 源:InputStream Reader 一定是被读取的. 目的:OutputStream Writer 一定是被写入的. 2.处理的 ...

  2. C# IO流的操作

    C# IO流的操作非常重要,我们读写文件都会使用到这个技术,这里先演示一个文件内容复制的例子,简要说明C#中的IO操作. namespace ConsoleApplication1 { class P ...

  3. C# IO流的操作(一)

    C# IO流的操作非常重要,我们读写文件都会使用到这个技术,这里先演示一个文件内容复制的例子,简要说明C#中的IO操作. namespace ConsoleApplication1 { class P ...

  4. IO流常规操作

    IO流 IO就是输入输出,IO设备在计算机中起着举足轻重的作用,IO流也就是输入输出流,用来交互数据,程序和程序交互,程序也可以和网络等媒介交互. 一.IO流的分类 要分类,肯定得站得不同角度来看这个 ...

  5. Java io流详解二

    原文地址https://www.cnblogs.com/xll1025/p/6418766.html 一.IO流概述 概述: IO流简单来说就是Input和Output流,IO流主要是用来处理设备之间 ...

  6. Java API —— IO流(数据操作流 & 内存操作流 & 打印流 & 标准输入输出流 & 随机访问流 & 合并流 & 序列化流 & Properties & NIO)

    1.操作基本数据类型的流     1) 操作基本数据类型 · DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型.应用程序可以使用数据输出 ...

  7. 从零开始学C++之IO流类库(二):文件流(fstream, ifstream, ofstream)的打开关闭、流状态

    一.文件流 ofstream,由ostream派生而来,用于写文件 ifstream,由istream派生而来, 用于读文件 fstream,由iostream派生而来,用于读写文件 二.打开文件 说 ...

  8. Java文件IO流的操作总结

    Java中的IO操作涉及到的概念及相关类很多,很容易弄混,今天特来整理总结一下,并附上一份完整的文件操作的代码. 概念解析 读和写 流就是管道,向管道里面写数据用输出流:write 从管道里面读数据, ...

  9. IO流-文件操作

    一.字节流读/写 文件 1.字节流 方式读取文件

  10. IO流的操作规律

    输入流和输出流相对于内存设备而言. 将外设中的数据读取到内存中:输入将内存的数写入到外设中:输出. 字符流的由来:其实就是:字节流读取文字字节数据后,不直接操作而是先查指定的编码表.获取对应的文字.在 ...

随机推荐

  1. SharePoint 前端开发常用的对象之_spPageContextInfo

    前言 _spPageContextInfo对象,是SharePoint开发一个非常常用的对象,尤其是前端开发,可以非常方便的获取到一些和站点有关的信息. 完整对象如下图,需要什么属性,可以自己获取,然 ...

  2. 对类的理解(c++)

    介绍目录: 1.类成员 1.1 成员函数 1.2 构造函数 1.2.1 对构造函数的理解 1.2.2成员初始化列表 1.2.3必须使用成员初始化列表的几种情况 1.2.4对于拷贝构造函数的参数是一个引 ...

  3. PPTP服务端与客户端 修改默认PPTP默认端口1723

    linux pptp服务端:我们在Linux下建立的pptpd端口号默认是1723,有时候这个端口并不是那么的好用,不是麽?所以服务端修改端口号比较简单 修改 /etc/services 文件查找 1 ...

  4. MUI框架开发HTML5手机APP(二)--页面跳转传值&底部选项卡切换

      概 述 JRedu 在上一篇博客中,我们学习了如何使用Hbuilder创建一个APP,同时如何使用MUI搭建属于自己的第一款APP,没有学习的同学可以戳链接学习: http://www.cnblo ...

  5. commit 冲突

    git status or repo sync . 时看到如下的提示: error: packages/apps/app/: branch alpha is published (but not me ...

  6. [Algorithm] Fibonacci Sequence - Anatomy of recursion and space complexity analysis

    For Fibonacci Sequence, the space complexity should be the O(logN), which is the height of tree. Che ...

  7. Win10系统的SurfacePro4的启动菜单太多怎么管理,UEFI的启动菜单如何编辑

    有时候多增加了一些硬盘版的PE,会出现下面这种问题,启动项目太多又删不掉(如果你硬盘版的PE修改了文件位置,这个选项还进不去)   关机之后,按开机键和音量+,进入Surface的启动菜单,直接删除原 ...

  8. iOS scrollsToTop属性失效

    点击状态栏返回顶部失效,是因为scrollView的scrollsToTop属性失效 (继承于scrollView的tableView collectionView也算). 这个属性默认是开启的,然而 ...

  9. 阿里云服务器CentOS7 vsftp安装、设置及后台端口的设置

    查看是否安装vsftp,我这个是已经安装的. [root@localhost vsftpd]# rpm -qa |grep vsftpd vsftpd-3.0.2-11.el7_2.x86_64 如果 ...

  10. settings设置中文admin

    所以更改setttings.py 下 LANGUAGE_CODE = 'zh-Hans'即可