C#的输入输出流
一 .NET Framework 类库的System.IO 命名空间
System.IO 命名空间包含允许读写文件和数据流的类型以及提供基本文件和目录支持的类型。
二 C#文件读写之FileStream详解
1. (FileStream fs1 = File.Open("c://test.txt", FileMode.Open));
FileMode.Open 直接用FileStream类打开文件c://test.txt"。
2. (FileStream fs2 = File.Open("c://test.txt", FileMode.Append, FileAccess.Write));
FileMode.Append,以追加的方式打开文件"c://test.txt",将某些内容写到"c://test.txt"里。
3.(FileStream fs3 =File.Open("c://test.txt", FileMode.Truncate, FileAccess.ReadWrite, FileShare.Read)).
FileMode.Truncate的意思是将文件打开清空里面的内容后再对文件进行操作。
4. FileStream MyFileStream1 = new FileStream(@"c:/Testing.txt", FileMode.Create);
这个方法的意思是创建一个可以读写的文件,并且可以允许其他人读取文件的内容。
三 C#基于流的输入输出 C#基于流的输入输出.:Stream-通过C# I/O 系统与物理设备连接起来,也就是平时读写的硬盘等物理存贮设备.流/Stream的方法和属性有:
Method/ Properties | 描述 |
void Close() | 关闭流 |
void Flush() | 清理流中的内容 |
int ReadByte() | 返回一个整数表示输入的字节数,如果没有数据返回-1 |
int Read(byte[ ] buf,int offset, int numBytes) |
将numBytes个字节读入到byte[ ]的以offset为,起始位置,返回读入成功的字节数 |
Long Seek(long offset,SeekOrigin origin) | 将当前位置定位到以origin为初始位置以后的offset处. |
void WriteByte(byte b) | 将单个字节写入到一个输出流. |
void Write(byte[ ] buf,int offset, int numBytes) | 写入byte[ ] buf中从offset开始的numBytes个字节. |
bool CanRead | 是否可读 |
bool CanSeek | 是否支持寻址 |
bool CanWrite | 是否可以写入数据 |
long Length | 流的长度 |
long Position | 流的当前位置. |
三. 流的继承结构
Stream是一个很大类的,在读写文件的时候,可以通过不同的流进行专业的数据读写.
The FileMode and FileAccess的几条规则:
Value | 意义 |
FileMode.Create | 创建文件,之前存在同名的文件将被毁掉 |
FileMode.CreateNew | 创建新文件,这个文件之前不存在 |
FileMode.Open | 打开已经存在的文件 |
FileMode.OpenOrCreate | 打开文件如果存在,否则创建新文件 |
FileMode.Truncate | 打开以存在的文件,将它的内容清除掉 |
FileMode.Append | 以追加的形式将数据写入到文件的最后 |
如果在打开文件的时候想限制文件访问权限,那么可以做如下的构造方法:
FileStream(string filename, FileMode mode, FileAccess access);
文件名 文件模式 操作模式
- Access可以是以下当中的一个值:
- FileAccess.Read/ FileAccess.Write/ FileAccess.ReadWrite;
- FileStreamfs=new FileStream(“c://tab.txt”,FileMode.OpenOrCreate,FileAccess.Read);
- C#中结合Post发送的Stream与Byte Array的操作似乎资料很少.下面是我这几天的研究成果.功能是将同文件夹下的a.jpg复制生成b.jpg.代码如下:
- byteArray.aspx.cs
- using System;
- using System.IO;
- using System.Data;
- using System.Drawing;
- using System.Drawing.Imaging;
- using System.Net;
- /*@
- Author:frank
- Site:www.2solo.cn
- Date:2008.02.20
- Info:C#复制图片,流与byteArray的应用,生成图片部分
- */
- namespace bArray {
- public partial class imgHandler : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- try
- {
- Stream sin = Page.Request.InputStream;
- System.Drawing.Image img = System.Drawing.Bitmap.FromStream(sin);
- Bitmap bmp = new Bitmap(img);
- MemoryStream bmpStream = new MemoryStream();
- bmp.Save(bmpStream, System.Drawing.Imaging.ImageFormat.Jpeg);
- FileStream fs = new FileStream(System.Web.HttpContext.Current.Server.MapPath("b.jpg"), FileMode.Create);
- bmpStream.WriteTo(fs);
- bmpStream.Close();
- fs.Close();
- bmpStream.Dispose();
- fs.Dispose();
- Response.Write("成功");
- }
- catch
- {
- Response.Write("失败");
- }
- }
- }
- }
- gopost.aspx.cs
- using System;
- using System.IO;
- using System.Drawing;
- using System.Drawing.Imaging;
- using System.Net;
- using System.Text;
- /*@
- Author:frank
- Site:www.2solo.cn
- Date:2008.02.20
- info:C#复制图片,流与byteArray的应用,提交图片部分
- */
- namespace gopost
- {
- public partial class postHandler : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- postImage();
- }
- private void postImage()
- {
- try
- {
- HttpWebRequest request;
- string imgUrl = System.Web.HttpContext.Current.Server.MapPath("a.jpg");
- request = (HttpWebRequest)HttpWebRequest.Create(http://localhost/byteArray/byteArray.aspx);
- request.KeepAlive = true;
- request.Method = "POST";
- byte[] byteArray = CvtImgBArr((System.Drawing.Image)new Bitmap(@imgUrl), ImageFormat.Jpeg);
- request.ContentType = "image/JPEG";
- request.ContentLength = byteArray.Length;
- Stream newStream = request.GetRequestStream();
- newStream.Write(byteArray, , byteArray.Length);
- newStream.Close();
- Response.Write("复制图片成功");
- }
- catch
- {
- Response.Write("复制图片失败");
- }
- }
- private static byte[] CvtImgBArr(System.Drawing.Image imageToConvert, ImageFormat formatOfImage)
- {
- byte[] imArr;
- try
- {
- using (MemoryStream myms = new MemoryStream())
- {
- imageToConvert.Save(myms, formatOfImage);
- imArr = myms.ToArray();
- }
- }
- catch (Exception) { throw; }
- return imArr;
- }
- }
- }
相对来说,byte Array在Html表单中的应用可能一直被忽视,但是正确的应用byte Array可以大大的优化程序,并做出一些意想不到的效果来。
- C# Stream 和 byte[] 之间的转换
- /* - - - - - - - - - - - - - - - - - - - - - - - -
- * Stream 和 byte[] 之间的转换
- * - - - - - - - - - - - - - - - - - - - - - - - */
- /// <summary>
- /// 将 Stream 转成 byte[]
- /// </summary>
- public byte[] StreamToBytes(Stream stream)
- {
- byte[] bytes = new byte[stream.Length];
- stream.Read(bytes, , bytes.Length);
- // 设置当前流的位置为流的开始
- stream.Seek(, SeekOrigin.Begin);
- return bytes;
- }
- /// <summary>
- /// 将 byte[] 转成 Stream
- /// </summary>
- public Stream BytesToStream(byte[] bytes)
- {
- Stream stream = new MemoryStream(bytes);
- return stream;
- }
- /* - - - - - - - - - - - - - - - - - - - - - - - -
- * Stream 和 文件之间的转换
- * - - - - - - - - - - - - - - - - - - - - - - - */
- /// <summary>
- /// 将 Stream 写入文件
- /// </summary>
- public void StreamToFile(Stream stream,string fileName)
- {
- // 把 Stream 转换成 byte[]
- byte[] bytes = new byte[stream.Length];
- stream.Read(bytes, , bytes.Length);
- // 设置当前流的位置为流的开始
- stream.Seek(, SeekOrigin.Begin);
- // 把 byte[] 写入文件
- FileStream fs = new FileStream(fileName, FileMode.Create);
- BinaryWriter bw = new BinaryWriter(fs);
- bw.Write(bytes);
- bw.Close();
- fs.Close();
- }
- /// <summary>
- /// 从文件读取 Stream
- /// </summary>
- public Stream FileToStream(string fileName)
- {
- // 打开文件
- FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
- // 读取文件的 byte[]
- byte[] bytes = new byte[fileStream.Length];
- fileStream.Read(bytes, , bytes.Length);
- fileStream.Close();
- // 把 byte[] 转换成 Stream
- Stream stream = new MemoryStream(bytes);
- return stream;
- }
- 另外,XML的一个应用是序列化,要用到把字符串转化成byte数组,方法:
- byte[] bytes = System.Text.UTF8Encoding.UTF8.GetBytes(XmlContent);
- 相对的,把byte数组转化为字符串的方法则为:
- string XmlContent = System.Text.UTFEncoding.UTF8.GetString(bytes);
- 从字符串到流Stream
- byte[] buffer = System.Text.Encoding.Unicode.GetBytes("faint");
- MemoryStream stream = new MemoryStream(buffer);
- MemoryStream ms = new MemoryStream(System.Text.Encoding.Default.GetBytes(AObjStr));
C#的输入输出流的更多相关文章
- java.IO输入输出流:过滤流:buffer流和data流
java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...
- Java中IO流,输入输出流概述与总结
总结的很粗糙,以后时间富裕了好好修改一下. 1:Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中.其中, 所有输入流类都是抽象类InputStream(字节输入 ...
- 第27章 java I/O输入输出流
java I/O输入输出流 1.编码问题 import java.io.UnsupportedEncodingException; /** * java涉及的编码 */ public class En ...
- java 对象输入输出流
对象的输入输出流的作用: 用于写入对象 的信息读取对象的信息. 对象的持久化. 比如:用户信息. ObjectInputStream : 对象输入流 ...
- 【转】输入/输出流 - 全面掌握IO
File类: 程序中操作文件和目录都可以使用File类来完成即不管是文件还是目录都是使用File类来操作的,File能新建,删除,重命名文件和目录,但File不能访问文件内容本身,如果需要访问文件本身 ...
- 输入输出流(IO)
输入输出流(IO)文件(File)java.io.File用于表示文件(目录),也就是说程序员可以通过File类在程序中操作硬盘上的文件和目录.File类只用于表示文件(目录)的信息(名称.大小等), ...
- Java输入/输出流体系
在用java的io流读写文件时,总是被它的各种流能得很混乱,有40多个类,理清啦,过一段时间又混乱啦,决定整理一下!以防再忘 Java输入/输出流体系 1.字节流和字符流 字节流:按字节读取.字符流: ...
- JAVA Io 缓冲输入输出流
java中提供带缓冲的输入输出流.在打开文件进行写入或读取操作时,都会加上缓冲,提高了IO读写性能. 1. BufferedInputStream 缓冲输入流 2. BufferedOutputStr ...
- C++输入输出流
一.C++输入输出流的含义 以前所用到的输入和输出,都是以终端为对象的,即从键盘输入数据,运行结果输出到显示器屏幕上.从操作系统的角度看,每一个与主机相连的输入输出设备都被看作一个文件.程序的输入指的 ...
- Java 输入输出流 转载
转载自:http://blog.csdn.net/hguisu/article/details/7418161 1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所 ...
随机推荐
- java基础(二十一)IO流(四)
这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...
- Ubuntu下安装PAC Manager
在Windows下习惯使用XShell.PAC Manager其实就是一个在Linux系统类似XShell的工具. 下载地址: https://sourceforge.net/projects/pac ...
- SqlServer SSAS IIS 部署
参考MSDN官网:http://technet.microsoft.com/zh-cn/library/gg492140.aspx 注意事项: 网络上有文章说,最后验证是否成功 是在浏览器中输入url ...
- Web前端常见问题处理
1. 浏览器后退按钮 这个在注册或者登陆的时候是一个普遍的问题,登陆之后,跳转到另外一个页面,我的鼠标有两个侧键,是用于前进和后退的,有时候会误点侧键,这个时候页面又会回到之前的登录页面,但事实是用户 ...
- Bzoj 2120: 数颜色 && 2453: 维护队列 莫队,分块,bitset
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: 2645 Solved: 1039[Submit][Status][Discuss] ...
- LR(1)表驱动语法分析程序
/* * LR(1) 语法分析 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #inc ...
- Java 并发包中的读写锁及其实现分析
1. 前言 在Java并发包中常用的锁(如:ReentrantLock),基本上都是排他锁,这些锁在同一时刻只允许一个线程进行访问,而读写锁在同一时 刻可以允许多个读线程访问,但是在写线程访问时,所有 ...
- iOS开发之状态栏UIStatusBar图标操作
NSArray *subIcons = [[[[UIApplication sharedApplication] valueForKeyPath:@"statusBar"] val ...
- 解决@media screen (自适应)IE浏览器不兼容问题
1.解决兼容性问题 (1)页面最顶部必须定义:<!DOCTYPE html> (2)点击:下载 respond.js 文件 (3)引入<script src="respon ...
- android-配置虚拟机Virtual device
Android的应用程序是基于virtual device运行的,在运行一个android的应用程序之前先要配置要virtual device