更新 : 2018-08-05

File 和 FileInfo 的区别

其实都是一样的,唯一不同只是说 File 适合用于对一个文件单次操作.

而 FileInfo 比较适合对一个文件多次操作.

FileStream 则是对文件的读写, 通过 File.Open, File.Create 我们可以获取到 file stream 然后就可以读写了.

来源 : http://www.cnblogs.com/jimmyzheng/archive/2012/03/17/2402814.html 系列

目前只作为个人参考.

微软的 stream 结构
老大是 Stream(抽象类) -> TextReader(抽象类) -> StreamReader(实体类) -> MemoryStream(实体类),FileStream...等等
第4层比较具体了,比较是针对性的类了

basic :
1 bit ( 1个2进制 )
8 bit = 1 byte ( 8个2进制 = 1字节 )
stream (流,流里面有多个字节)
英文字母是一个字节,汉字是2个字节 (也要base on Encode手法)
char 是字符类型 . on c# 1 char = 2字节 (代表一个字符)
表示多个字符用 char[] 数组, String 则是微软封装的一个上层, 对char的简单控制。
String 里面装了 char[], char的length是不可以改变的, 但是string可以

stream 的 read write 逻辑 :
调整好 stream 的 position
write(buffer,offset,length) 参数一是一个你要写入进去stream的一组字节, offset是针对stream position做偏移, length 是你要写入多少.
read (buffer,offset,length) 和上面的一样,只不过这次的buffer应该是一个空的,read了会把stream中的字节放入到buffer中.

常用 :

byte[] buffer = null;
string testString = "Stream!Hello world 我";
buffer = Encoding.UTF8.GetBytes(testString); //string to byte (汉字算2字节哦,当然也要考虑的你的encode手法 UTF8,Unicode,ASCII的不同都可能影响字节数)
using (MemoryStream stream = new MemoryStream())
{
//最需要注意的是 position, read write 会auto调整position的, 所以养成好习惯,每次自己控制检查
//设置position的方法有 :
stream.Seek(, SeekOrigin.Begin); //参数1 : offset
stream.Position = ;
stream.Write(buffer, , buffer.Length); //在写入的时候也是可以设置offset, but position 就不可以设置了。
buffer = new byte[stream.Length];
stream.Position = ;
long readHowMuch = stream.Read(buffer, , buffer.Length); //可以知道最终read了多少 (比如我们说要read 100, 结果里面只有30, 那么最终就是30了)
string result = Encoding.UTF8.GetString(buffer, , buffer.Length); //byte to string
}
//简单的readToEnd
string filePath = Server.MapPath(@"~\temp\stream\text.txt");
using (FileStream stream = File.OpenRead(filePath)) //直接打开, 文件不在会error
{
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8, false)) //告诉它是什么encode,就强转了, 参数3 : 是否用智能判断encode
{
string x = reader.ReadToEnd();
}
}

Stream 基础和常用的更多相关文章

  1. Java SE 基础:常用关键字

    Java SE 基础:常用关键字 常用关键字表

  2. html5基础的常用的技巧

    html5基础的常用的技巧 1. 新的Doctype声明 XHTML的声明太长了,我相信很少会有前端开发人员能手写出这个Doctype声明. <!DOCTYPE html PUBLIC &quo ...

  3. Android 基础:常用布局 介绍 & 使用(附 属性查询)

    Android 基础:常用布局 介绍 & 使用(附 属性查询)   前言 在 Android开发中,绘制UI时常需各种布局 今天,我将全面介绍Android开发中最常用的五大布局 含 Andr ...

  4. python基础(常用内容)

    python基础(常用内容) 机器数: 一个数在计算机中的二进制表示形式就是机器数. 例如: +3用机器数表示就用<00000011>表示 -3用机器数表示就用<10000011&g ...

  5. 十八. Python基础(18)常用模块

    十八. Python基础(18)常用模块 1 ● 常用模块及其用途 collections模块: 一些扩展的数据类型→Counter, deque, defaultdict, namedtuple, ...

  6. Linux基础之常用基本命令备忘

    Linux基础之常用基本命令备忘 PWD   查询当前所在Linux上的位置 /         根目录 CD(change directory)切换目录  语法 CD /(注意添加空格)   LS ...

  7. Linux - nginx基础及常用操作

    目录 Linux - nginx基础及常用操作 Tengine淘宝nginx安装流程 nginx的主配置文件nginx.conf 基于域名的多虚拟主机实战 nginx的访问日志功能 网站的404页面优 ...

  8. Redis基础类型常用操作命令

    Redis基础类型常用操作命令 概念:Redis是用C语言开发的一个开源的高性能键值对数据库. 特征: 数据间没有必然的联系 内部采用单线程机制进行工作 高性能 多数据类型支持 字符串类型 Strin ...

  9. HTML&CSS基础-html常用的标签

    HTML&CSS基础-html常用的标签 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.html的源代码 <!DOCTYPE html> <html& ...

随机推荐

  1. GitHub 使用手册 - 基础篇

    缘起 Git已经成为程序员必备技能之一,而GitHub做为做流行的Git仓库托管平台,其不仅提供Git仓库托管,还是一个非常棒的技术人员社交平台,可以通过开源的项目进行协作.交流,是现在优秀的工程师必 ...

  2. Something broke! (Error 500)——reviewboard

    Something broke! (Error 500) 1.什么时候会出现? 不清楚,出现过几次 2.解决手段及方法: 更改/www_rb/conf/settings_local.py文件,将DEB ...

  3. python爬虫__第一个爬虫程序

    前言 机缘巧合,最近在学习机器学习实战, 本来要用python来做实验和开发环境 得到一个需求,要爬取大众点评中的一些商户信息, 于是开启了我的第一个爬虫的编写,里面有好多心酸,主要是第一次. 我的文 ...

  4. 一、进程与信号之exec函数system函数

    exec函数: 子进程调用exec函数执行另一个程序,exec函数进程完全由新程序代替,替换原有程序正文,数据,堆,栈段 #include <unistd.h> extern char * ...

  5. sql为了实现转换的行列

    全名 学科 成绩 牛芬 语文 81 牛芬 数学 88 牛芬 英语 84 张三 语文 90 张三 数学 98 张三 英语 90 (表一) 现有一个表如(表一) 姓名 语文 数学 英语 牛芬 81 88 ...

  6. 怎样在 SSASserver之间做同步

     简单介绍: 从SQL Server 2005開始,分析服务就支持了同步的功能.本文将介绍怎样在SQL Server 2012下同步Adventureworks的分析服务数据库.通过同步的功能,我 ...

  7. JAVA - hashcode与equals作用、关系

      Hashcode的作用 总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set.前者集合内的元素是有序的,元素可以重复:后者元素无序,但元素不可重复.      ...

  8. yii [error] [exception.CHttpException.404] exception 'CHttpException' with message 'Unable to resolve the request "favicon.ico".'

    yii使用中,发现runtime文件夹下出现这个错误信息 解决办法:在生成的APP程序根目录下建.htaccess文件(前提是需要开启apache重写,具体如何开,查资料咯) 然后配置如下 <I ...

  9. Could not reliably determine the server's fully qualified domain name

    启动apache报错: [root@namenode1 ]# service httpd start Starting httpd: httpd: Could not reliably determi ...

  10. 95秀-PullToRefreshListView 示例

        正在加载.暂无数据页面 public class RefreshGuideTool {     private RelativeLayout rl_loading_guide;//整个View ...