C#学习笔记:文件操作
2017-11-01 16:05
417 查看
这里说的文件操作指的是文件的读写操作。按照文件贮存的形式,可把文件分为文本文件和二进制文件。在C#中,不同的文件类型有不同的操作方式。下面将研究在C#中如何对文本文件和二进制文件进行操作。
File类:一个静态类,不可以用来实例化对象。可以直接用来打开、创建文件,也可以对文件进行读写操作。一般会配合FileStream类一起使用。
FileStream类:非静态类。其功能是打开文件以及对文件进行读写操作,有时会与File类、StreamReader/StreamWriter类一起使用。
StreamReader类:非静态类。其功能是对文件流进行读操作,需要FileStream配合。
StreamWriter类:费静态类。其功能是对文件流进行写操作,需要FileStream配合。
下面,通过若干例子来说明这几个类的功能。
1.一次读入整个文本文件
File类对文件的读操作比较简单,就是直接读取整个文件,如果要进行更细致的操作还需要FileSream类和StreamReader类。
2.一次从文件读取一行
如果要对文件进行行操作的话,就需要用到FileStream类和StreamReader类了。
3.一次从文件读取一块
对文件进行块操作,可以用FileStream类和StreamReader类。
4.从文件中读取一个字符
可以用FileStream类和StreamReader类读取文件中的一个字符。
5.设置文件指针
有时候,从文件中读取数据既不是从文件开头开始,也不是从当前位置开始,而是从特定的位置开始,这就需要设置文件指针了。FileStream类的seek方法就是用来设置文件当前指针的。seek方法的第一个参数是偏移量,第二个参数是偏移量的参照位置(SeekOrigin.Begin、SeekOrigin.Current、SeekOrigin.End),分别是文件开头、文件当前位置、文件末尾。
6.创建一个文件
利用File类可以创建新的文件。
7.向文本中写入数据
1.读取数据
2.写入数据
文本文件操作
文本文件操作主要涉及到几个类,分别是File类、FileStream类、StreamReader/StreamWriter类。要使用这几个类,首先要引用名称空间:Systerm.IO。File类:一个静态类,不可以用来实例化对象。可以直接用来打开、创建文件,也可以对文件进行读写操作。一般会配合FileStream类一起使用。
FileStream类:非静态类。其功能是打开文件以及对文件进行读写操作,有时会与File类、StreamReader/StreamWriter类一起使用。
StreamReader类:非静态类。其功能是对文件流进行读操作,需要FileStream配合。
StreamWriter类:费静态类。其功能是对文件流进行写操作,需要FileStream配合。
下面,通过若干例子来说明这几个类的功能。
1.一次读入整个文本文件
File类对文件的读操作比较简单,就是直接读取整个文件,如果要进行更细致的操作还需要FileSream类和StreamReader类。
/*代码一:用Filele类*/ string text = File.ReadAllText("my.txt");//打开文件,并读取整个文件到字符串中,读取完关闭文件。 byte[] btext = File.ReadAllBytes("my.txt");//打开文件,并读取整个文件到字节数组中,读取完关闭文件。 string[] strs = File.ReadAllLines("my.txt");//打开文件,并读取文件所用行,并保存到字符串数组中,读取完关闭文件。 /*代码二:用FileStream类和StreamReader类*/ FileStream fs = new FileStream("my.txt", FileMode.Open, FileAccess.Read); //或者FileStream fs=File.Open("my.txt", FileMode.Open, FileAccess.Read); StreamReader sr = new StreamReader(fs); string str= sr.ReadToEnd();//从流的当前位置读取到文件末尾
2.一次从文件读取一行
如果要对文件进行行操作的话,就需要用到FileStream类和StreamReader类了。
FileStream fs = new FileStream("my.txt", FileMode.Open, FileAccess.Read); StreamReader sr = new StreamReader(fs); string str= sr.ReadLine();//从文件当前位置开始读取一行
3.一次从文件读取一块
对文件进行块操作,可以用FileStream类和StreamReader类。
/*代码一:仅用FileStream类*/ FileStream fs = new FileStream("my.txt", FileMode.Open, FileAccess.Read); byte[] bytes=new byte[100]; int num = fs.Read(bytes, 10, 100);//从文件的第十个字节开始读取100个字节到数组bytes中。 /*代码二:FileStream类和StreamReader类*/ FileStream fs = new FileStream("my.txt", FileMode.Open, FileAccess.Read); StreamReader sr = new StreamReader(fs); char[] chs = new char[100]; int num = sr.ReadBlock(chs, 10, 100);//从文件的第十个字节开始读取100个字节到数组chs。
4.从文件中读取一个字符
可以用FileStream类和StreamReader类读取文件中的一个字符。
FileStream fs = new FileStream("my.txt", FileMode.Open, FileAccess.Read); byte ch; ch=fs.ReadByte();//从流的当前位置读取一个字节。 //读取指定位置的一个字节 fs.Seek(2, SeekOrigin.Begin);//文件指针设定在距离开头2字节处 ch=fs.ReadByte();
5.设置文件指针
有时候,从文件中读取数据既不是从文件开头开始,也不是从当前位置开始,而是从特定的位置开始,这就需要设置文件指针了。FileStream类的seek方法就是用来设置文件当前指针的。seek方法的第一个参数是偏移量,第二个参数是偏移量的参照位置(SeekOrigin.Begin、SeekOrigin.Current、SeekOrigin.End),分别是文件开头、文件当前位置、文件末尾。
FileStream fs = new FileStream("my.txt", FileMode.Open, FileAccess.Read); byte ch; //文件指针移动到距离问价开头2自己的位置,然后读取一个字节。 fs.Seek(2, SeekOrigin.Begin); fs.ReadByte();
6.创建一个文件
利用File类可以创建新的文件。
//创建一个文件,如果文件存在则覆盖,否则创建新的文件。 File.Create("my.txt"); //向新建的文件中写入数据。 File.WriteAllText("my.txt", "hello world!");
7.向文本中写入数据
//写入一个字符串 File.WriteAllText("my.txt", "hello world!"); //按行写入字符串数组 string[] strs = new string[2] { "hhhhh", "jjjjjj" }; File.WriteAllLines("my.txt", strs); //写入字节数组 byte[] chs = new byte[5]; File.WriteAllBytes("my.text", chs); //从缓冲区中某个位置开始读取数据输入到文件中 FileStream fs = new FileStream("my.txt", FileMode.Open, FileAccess.Write); byte[] array = new byte[100]; fs.Write(array, 0, 100); //向文件中写入一个字节数据 FileStream fs = new FileStream("my.txt", FileMode.Open, FileAccess.Write); fs.WriteByte((byte)'a'); //将任意类型的数据输入到文本文件 FileStream fs = new FileStream("my.txt", FileMode.Open, FileAccess.Write); StreamWriter sw = new StreamWriter(fs); //value可以是bool/byte/char/int/float/double...char[]/byte[]/string等等 sw.Write(value); //向文本文件中写入一行数据 FileStream fs = new FileStream("my.txt", FileMode.Open, FileAccess.Write); StreamWriter sw = new StreamWriter(fs); //value可以是bool/byte/char/int/float/double...char[]/byte[]/string等等 sw.WriteLine(value);//写完之后自动换行 //将数据格式化写入到文本文件 FileStream fs = new FileStream("my.txt", FileMode.Open, FileAccess.Write); StreamWriter sw = new StreamWriter(fs); float x = 12.212333f; int y = 100; sw.Write("x={0},y={1}",x,y);
二进制文件操作
二进制文件操作主要用到File类、FileStream类、BinaryReader/BinaryWriter类。下面通过例子来说明。1.读取数据
FileStream fs = new FileStream("my.data", FileMode.Open, FileAccess.Read); BinaryReader br = new BinaryReader(fs); //读取一个浮点数 float x = br.ReadSingle(); //读取一个整数 int y = br.ReadInt32();
2.写入数据
FileStream fs = new FileStream("my.data", FileMode.Open, FileAccess.ReadWrite); float x = 12.33f; int y = 100; BinaryWriter bw = new BinaryWriter(fs); bw.Write(x); bw.Write(y);
注意事项
需要注意的是,每次打开文件,操作完毕后,需要关闭文件,否则写入到流的数据可能不会被保存到文件中。如有必要,可以使用Flush方法立即将流中的数据写入到文件中。例如FileStream fs = new FileStream("my.txt", FileMode.Open, FileAccess.ReadWrite); StreamWriter sw = new StreamWriter(fs); sw.Write(111111); sw.Flush();//将数值111111l立即保存到文件中 sw.Write("hello"); sw.Flush();//将字符串立即保存到文件中。 sw.Close();//关闭流写入器 fs.Close();//关闭流
相关文章推荐
- c#学习笔记之文件操作
- C#学习笔记 文件操作
- C#学习笔记21——文件、目录、注册表操作
- c#学习笔记之文件操作
- c#之文件操作(学习笔记)
- (C#)学习笔记1:文件和注册表操作
- C#学习笔记之操作配置文件
- C#源码学习之---事件驱动异步文件操作
- C#学习笔记—字符串操作
- 孙鑫VC++视频学习笔记之12:文件操作
- GNU/Linux应用程序开发学习笔记(一) 文件操作
- matlab学习笔记--matlab目录和文件操作
- 工作学习笔记——C#自定义类型剪贴板操作、自定义鼠标光标定位问题
- PHP学习笔记--第六章 .文件和目录操作
- 孙鑫VC++视频学习笔记之12:文件操作
- php学习笔记5—(文件操作)
- C#学习笔记(二十一):使用文件基础
- [学习笔记]Java 中对文件的读写操作之比较
- Linux程序设计-学习笔记-第三章文件操作
- 孙鑫VC学习笔记:第十二讲 用API函数、CFile类操作文件