fileStream:操作字节的,也就是所有的文件都可以拿它去操作 / file / path / streamRead / streamWrite(这两个都是操作字符的,它所操作的都是文本文件)
fileStream 与file的区别,fileStream可以操作大文件,因为fileStream是以文件流的形式读取文件,可以拆开读取,二file 是一次性读取。
文件流-à文件(fileStreamàfime):
操作小文件可以用file,而操作大文件就需要用到fileStream
一个简单的文件流读取代码
static void Main(string[] args)
{
string [email protected]"C:\Users\Administrator\Desktop\奥秘.txt";
using (FileStream fsRead = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read))
{
byte[] buffer=new byte[1024*1024*5];
//i代表实际读取到的字节
int i = fsRead.Read(buffer, 0, buffer.Length);
string str = Encoding.UTF8.GetString(buffer,0,i);
Console.WriteLine(str);
Console.ReadKey();
}
}
一个关于文件流读写的小练习:
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.IO; 7 using System.Linq; 8 using System.Text; 9 using System.Threading.Tasks; 10 using System.Windows.Forms; 11 12 namespace fileStream小练习 13 { 14 public partial class Form1 : Form 15 { 16 public Form1() 17 { 18 InitializeComponent(); 19 } 20 //选择文件 21 private void button1_Click(object sender, EventArgs e) 22 { 23 //选择文件的弹窗 24 OpenFileDialog ofd = new OpenFileDialog(); 25 //设置标题 26 ofd.Title = "请选择文件"; 27 //初始化打开的界面 28 ofd.InitialDirectory = @"C:\Users\Administrator\Desktop"; 29 //多选 30 ofd.Multiselect = true; 31 //文件的类型 32 ofd.Filter = "所有文件|*.*"; 33 ofd.ShowDialog(); 34 this.txtReadPath.Text = ofd.FileName; 35 } 36 //保存文件 37 private void button2_Click(object sender, EventArgs e) 38 { 39 OpenFileDialog ofd = new OpenFileDialog(); 40 ofd.Title = "选择保存的地址"; 41 ofd.InitialDirectory = @"C:\Users\Administrator\Desktop"; 42 ofd.ShowDialog(); 43 txtSavePath.Text = ofd.FileName; 44 45 } 46 47 private void button3_Click(object sender, EventArgs e) 48 { 49 using (FileStream fsRead = new FileStream(this.txtReadPath.Text.Trim(), FileMode.OpenOrCreate, FileAccess.Read)) 50 { 51 using (FileStream fsWrite = new FileStream(this.txtSavePath.Text.Trim(), FileMode.OpenOrCreate, FileAccess.Write)) 52 { 53 this.progressBar1.Maximum = (int)fsRead.Length; 54 byte[] buffer = new byte[1024 * 1024 * 3]; 55 while (true) 56 { 57 58 //实际读取的字节数 59 int r = fsRead.Read(buffer, 0, buffer.Length); 60 61 fsWrite.Write(buffer, 0, r); 62 this.progressBar1.Value = (int)fsWrite.Length; 63 if (r == 0) 64 { 65 MessageBox.Show("上传成功!"); 66 break; 67 } 68 } 69 } 70 } 71 } 72 } 73 }
注意:File 只能操作小文件,一次性读取
File类:
File.ReadAllLines(“路径”,Encoding.Default);//读取本地txt格式的文件//只能操作文本文件,
什么时文本文件,放在记事本中不会乱码的文件,基本都属于文本文件,常见 的有txt html xml
Encoding.Default是默认的本机的编码格式
File.ReadAllLines()的默认编码格式时UTF-8 , 返回的是一个数组,以行为单位
还有一个 File.ReadAllText() 返回一个字符串,将文件一字符串的格式读取
还有一个叫File.ReadAllBytes()返回一个字节数组,然后再通过Encoding.Default.GetString(buffer)转换成字符串.
//以字符数组的方式读取
//string[] lines = File.ReadAllLines(@"C:\Users\Administrator\Desktop\2017-7-4日笔记.txt",ASCIIEncoding.Default);
//foreach (string item in lines)
//{
// Console.WriteLine(item);
//}
//以字符串的方式读取
//string str = File.ReadAllText(@"C:\Users\Administrator\Desktop\2017-7-4日笔记.txt", ASCIIEncoding.Default);
//Console.WriteLine(str);
//以字节数组的方式读取
//byte[] buffer = File.ReadAllBytes(@"C:\Users\Administrator\Desktop\2017-7-4日笔记.txt");
//将字节转换成字符串
//string str = Encoding.Default.GetString(buffer);
//int length = str.Length;
以上时file的读取的三种方式,下面介绍三种写的操作:
File.WriteAllBytes()、File.WriteAll
//文件的写入
//string str="heheda";
//byte[] buffer = Encoding.Default.GetBytes(str);
//File.WriteAllBytes(@"C:\Users\Administrator\Desktop\qqq.txt", buffer);
第二种方法
String str=”hehe”;
File.WriteAllText(@"C:\Users\Administrator\Desktop\qqq.txt",str);
第三种方法:
string[] arrstr = { "hehe", "xixi", "lili" };
File.WriteAllLines(@"C:\Users\Administrator\Desktop\qqq.txt", arrstr);
编码格式:概念:将字符串以怎样的形式保存为二进制。形式就是编码格式。
最早的编码格式ASCII美国人的256个
中国最早的编码:GB2312
香港台湾GBK
还有个少数民族的GB18030
最后ISO的一个组织出来了,出了一个通用的标准编码:Unicode
刚开始用的时utf-16
现在用的最多的时utf-8
出现乱码的原因:我们在保存文件的时候采用的编码格式与打开这个文件时候的编码格式不一样
File 是一个静态类,介绍几个常用的方法:
Exists():判断制定的文件是否存在
Create()创建文件
Move() 剪切(移动)文件
Copy() 复制文件
Delete() 删除文件