文件读写

Posted zing163

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件读写相关的知识,希望对你有一定的参考价值。

一、概述

1、什么是流

流相当于一个管道,C#程序通过流来读写文件。流分为:

  • 输入流 : 相当于程序而言,数据从文件写入到程序这个过程
  • 输出流 : 相当于程序而言,数据从程序输出到文件中的过程

2、FileStream对象

FileStream对象表示在磁盘或网络路径上指向文件的流(即用于指向要操作的文件);

在FileStream的基础上,使用StreamReader或StreamWriter实现文件的读写(字节方式)。

FileStream 对象 = new FileStream(String path,
                               FileModel model
                               [,FileAccess access,FileShare share]) ;

参数说明:

  • path :指向要操作的文件(路径+文件名)
  • FileMode:打开文件的方式
    • CreateNew:创建新文件,如果文件存在会抛异常。
    • Create:创建新文件,如果文件存在会覆盖。
    • Open:打开现有文件,流指向文件开头。如果文件不存在则抛出异常。
    • OPenOrCreate:打开文件,流指向文件开头。如果文件不存在则创建新文件。
    • Truncate:打开现有文件并清除文件内容,流指向文件开头。如果文件不存在则抛出异常。
    • Append:打开文件,流指向末尾,只能与枚举FileAccess.Write联合使用(追加内容)。
  • FileAccess:访问文件的方式
    • Read:打开文件,用于只读
    • Write:打开文件,用于只写
    • ReadWrite:打开文件,用于读写
  • FileShare:文件共享方式
    • None:不共享当前文件
    • Read:允许随后打开文件读取
    • Write:允许随后打开文件写入
    • ReadWrite:允许随后打开文件读取或写入
    • Delete:允许随后删除文件

语法:

FileModel.Xxx

FileAccess.Xxx

FileShare.Xxx

3、实现文件的读/写

以字节数组的方式进行读写

1)读取文件中的数据

FileStream fs = new FileStream(@"d:abc.txt",FileMode.Open);
byte[] b = new byte[1024];

while (fs.Read(b, 0, b.Length) > 0)
{
    string myStr = System.Text.Encoding.UTF8.GetString(b);
    richTextBox1.Text = myStr ;
}
fs.Close();

2)写数据到文件中

//创建FileStream对象,指定要操作的文件
FileStream fs = new FileStream(@"d:abc.txt", FileMode.Append);
//把数据转换为字节数组
byte[] data = System.Text.Encoding.UTF8.GetBytes("好好学习,天天向上!!");
//写数据
fs.Write(data, 0, data.Length);
//关闭流
fs.Close();

二、文件的读取:StreamReader

1、语法

// 创建对象 - 依赖构造方法
StreamReader 对象 = new StreamReader(Stream stream[,Encoding.字符编码]) ;
StreamReader 对象 = new StreamReader(filename[,Encoding.字符编码]) ;

参数说明:

  • Stream : 要读取的文件流(FileStrem是其中的Stream)
  • filename : 路径+文件名
  • Encoding : 字符编码

2、方法

  • ReadLine() : 一行一行地读取文件,读到文件的末尾时,返回null
  • ReadToEnd() : 从文件的开始到末尾,一次性读取
  • Close() : 关闭流

三、文件的写入:StreamWriter

1、语法

StreamWriter 对象 = new StreamWriter(Stream stream) ;
StreamWriter 对象 = new StreamWriter(string filename,bool append,Encoding encoding) ;
StreamWriter 对象 = new StreamWriter(string filename,bool append,Encoding encoding) ;

参数说明:

  • stream : 要写入文件的流
  • append : 是否追加
  • encoding : 字符编码
  • filename : 路径+文件名

2、方法

  • Write() : 写入数据
  • WriteLine() : 写入数据并换行
  • flush() : 清空缓冲区
  • Close() : 关闭流

四、快速文件操作

1、文件写入

1)File.AppendAllText(string path,string content,Encoding encoding)

  • path : 路径+文件
  • content : 向文件添加的内容
  • encoding : 编码

添加内容到文件,如果文件存在,追加内容到文件,最后关闭文件;
如果文件不存在,则创建文件并添加内容到文件,最后关闭文件

File.AppendAllText("e:\bb.txt","你好",Encoding.Default);

2)File.WriteAllBytes(string path,byte[] bytes)

File.WriteAllBytes("e:b.txt", Encoding.Default.GetBytes("你好"));

3)File.WriteAllLines(string path,string[] content,Encoding encoding) ;

string[] str = { "我", "好" };
File.WriteAllLines("e:b.txt", str, Encoding.Default);

4)File.WriteAllText(string path,string content,Encoding encoding) ;

File.WriteAllText("e:b.txt", "好好学习", Encoding.Default);

2、文件读取

1)File.ReadAllText(string path[,Encoding encoding]) ;

String str = File.ReadAllText("e:b.txt",Encoding.Default);

2)File.ReadAllBytes(string path) ;

byte[] str = File.ReadAllBytes("e:b.txt");
MessageBox.Show(System.Text.Encoding.Default.GetString(str));

3)File.ReadAllLines(string path[,Encoding encoding]) ;

string[] str = File.ReadAllLines("e:b.txt", Encoding.Default);
MessageBox.Show(string.Join(",",str));

3、文件操作

  • File.Encrypt(string path) : 加密文件
  • File.Decrypt(string path) : 解密文件
  • Directory.Exists(string path):判断目录是否存在
  • File.Exists(string path) : 判断文件是否存在
  • File.Delete(string path) : 删除文件
  • File.Copy(string sourceFile,String DestFile) : 复制文件

以上是关于文件读写的主要内容,如果未能解决你的问题,请参考以下文章

Android tcp/ip 读写缓冲区脱离主代码

读写锁 与 互斥锁

Java-jxl插件Excel文件读写报错jxl.read.biff.BiffException: Unable to recognize OLE stream

Java-jxl插件Excel文件读写报错jxl.read.biff.BiffException: Unable to recognize OLE stream

VSCode自定义代码片段——.vue文件的模板

java中ReentrantReadWriteLock读写锁的使用