一 .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#的输入输出流的更多相关文章

  1. java.IO输入输出流:过滤流:buffer流和data流

    java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...

  2. Java中IO流,输入输出流概述与总结

    总结的很粗糙,以后时间富裕了好好修改一下. 1:Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中.其中, 所有输入流类都是抽象类InputStream(字节输入 ...

  3. 第27章 java I/O输入输出流

    java I/O输入输出流 1.编码问题 import java.io.UnsupportedEncodingException; /** * java涉及的编码 */ public class En ...

  4. java 对象输入输出流

    对象的输入输出流的作用: 用于写入对象 的信息读取对象的信息. 对象的持久化. 比如:用户信息.              ObjectInputStream   : 对象输入流            ...

  5. 【转】输入/输出流 - 全面掌握IO

    File类: 程序中操作文件和目录都可以使用File类来完成即不管是文件还是目录都是使用File类来操作的,File能新建,删除,重命名文件和目录,但File不能访问文件内容本身,如果需要访问文件本身 ...

  6. 输入输出流(IO)

    输入输出流(IO)文件(File)java.io.File用于表示文件(目录),也就是说程序员可以通过File类在程序中操作硬盘上的文件和目录.File类只用于表示文件(目录)的信息(名称.大小等), ...

  7. Java输入/输出流体系

    在用java的io流读写文件时,总是被它的各种流能得很混乱,有40多个类,理清啦,过一段时间又混乱啦,决定整理一下!以防再忘 Java输入/输出流体系 1.字节流和字符流 字节流:按字节读取.字符流: ...

  8. JAVA Io 缓冲输入输出流

    java中提供带缓冲的输入输出流.在打开文件进行写入或读取操作时,都会加上缓冲,提高了IO读写性能. 1. BufferedInputStream 缓冲输入流 2. BufferedOutputStr ...

  9. C++输入输出流

    一.C++输入输出流的含义 以前所用到的输入和输出,都是以终端为对象的,即从键盘输入数据,运行结果输出到显示器屏幕上.从操作系统的角度看,每一个与主机相连的输入输出设备都被看作一个文件.程序的输入指的 ...

  10. Java 输入输出流 转载

    转载自:http://blog.csdn.net/hguisu/article/details/7418161 1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所 ...

随机推荐

  1. Colour your Log4Net events in your RichTextBox zz

    You’re most probably here because you have already read my article How to watch your log through you ...

  2. 简单的API应用

    对于初学系统编程,了解下系统的API是必要的: 下面这个程序实现的是将自身程序复制到windows目录和系统目录: #include<stdio.h> #include<string ...

  3. Windows Phone8开发工具包简述(转载)

    Windows Phone 软件开发包 (SDK) 8.0 可为您提供开发 Windows Phone 8 和 Windows Phone 7.5 应用和游戏所需的工具. 概述Windows Phon ...

  4. [MarsZ]ThinkPHP项目实战总结

    本文原word格式百度云盘下载地址: http://pan.baidu.com/s/1qYqZFkg 综述 2 需求 2 作者 2 系统一览 2 Unity3d客户端 2 PHP后台 4 准备 6 X ...

  5. CUDA编程-(3)图形流水线时代

    图形流水线时代 图中所说的顶点,为多边型的角.GeForce系列设计图形流水型的目的就是渲染三角形的图元,这里指三角线图元的角.三角形图元越小,图片的质量就越好. 顶点控制的作用:从CPU中,接受参数 ...

  6. SDPLR的安装过程(matlab)

    SDPLR 半正定规划优化工具的安装过程很简单,只要按照SDPLR 1.03-beta User's Guide (short version).pdf的介绍安装就可以. 运行在下载的工具包目录里运行 ...

  7. QEMU MIPIS远程共享ubuntu主机的文件

    尝试啦很多中办法,最终选择以在QEMU模拟器中ssh 远程登入的方式访问主机,并用sshfs 挂载 主机端的文件到模拟器中,实现模拟器访问主机端的代码. SSH分客户端openssh-client和o ...

  8. phpDesigner 7.2.5 注册码 更改 语法高亮 主题

    注册码: 用户名:www.xiazaiba.com 序列号:43AB0D432A29EE238CCE0F884D84D8A18498498E98298A98568AD05A0B40 验证码:7S2FF ...

  9. MongDB主从复制、复制集

    主从复制比较简单,指定master.slave即可,其中master可写可读.slave只能读不能写.向master插入数据时,mongodb会自动将数据复制到slave节点.这样做的好处是读写分离, ...

  10. Uber入驻四川乐山峨眉地区

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...