c# 简单介绍文本文件的读写[File/FileInfo/FileStream/StreamReader/StreamWriter]

文章目录

一.文本文件的读写

1. File类
- Copy() [复制文件]
- Create() [(FileStream)创建文件]
- Delete() [删除文件]
- Move() [移动文件]
- Exists() [文件是否存在]
- AppendText() [(StreamWriter)打开追加写入字符串]

创建一个 StreamWriter ,它将 UTF-8 编码文本追加到现有文件或新文件(如果指定文件不存在)

public static StreamWriter AppendText(string path);
  • path: 要向其中追加内容的文件的路径
  • 返回结果: 一个 StreamWriter ,它将 UTF-8 编码文本追加到指定文件或新文件

- CreateText() [(StreamWriter)打开覆盖写入字符串]

创建或打开用于写入 UTF-8 编码文本的文件

public static StreamWriter CreateText(string path);
  • path: 要打开以进行写入的文件
  • 返回结果: 一个 StreamWriter ,它使用 UTF-8 编码写入到指定的文件

- Open() [(FileStream)打开文件读/写]

打开指定路径上的 FileStream ,具有带读、写或读/写访问的指定模式和指定的共享选项

public static FileStream Open(string path, FileMode mode);
public static FileStream Open(string path, FileMode mode, FileAccess access);
public static FileStream Open(string path, FileMode mode, FileAccess access, FileShare share);
  • path: 要打开的文件
  • mode: FileMode 值,用于指定在文件不存在时是否创建该文件,并确定是保留还是覆盖现有文件的内容
  • access: 一个 FileAccess 值,它指定可以对文件执行的操作
  • share: 一个 FileShare 值,它指定其他线程所具有的对该文件的访问类型

- OpenRead() [(FileStream)打开只读取]

打开现有文件以进行读取

public static FileStream OpenRead(string path);
  • path: 要打开以进行读取的文件
  • 返回结果: 指定路径上的只读 FileStream

- OpenWrite() [(FileStream)打开只写入]

打开一个现有文件或创建一个新文件以进行写入

public static FileStream OpenWrite(string path);
  • path: 要打开以进行写入的文件
  • 返回结果: 指定路径上具有 FileStream 访问权限的非共享的 System.IO.FileAccess.Write 对象

- OpenText() [(StreamReader)打开只读取]

打开现有 UTF-8 编码文本文件以进行读取

public static StreamReader OpenText(string path);
  • path: 要打开以进行读取的文件
  • 返回结果: 指定路径上的 StreamReader

- AppendAllLines() [追加写入字符串行]

向一个文件中追加行,然后关闭该文件。如果指定文件不存在,此方法会创建一个文件,向其中写入指定的行,然后关闭该文件

public static void AppendAllLines(string path, IEnumerable<string> contents);
public static void AppendAllLines(string path, IEnumerable<string> contents, Encoding encoding);
  • path: 要向其中追加行的文件。 如果文件尚不存在,则创建该文件
  • contents: 要追加到文件中的行
  • encoding: 要使用的字符编码

- AppendAllText() [追加写入字符串]

将指定的字符串追加到文件中,如果文件还不存在则创建该文件

public static void AppendAllText(string path, string contents, Encoding encoding);
public static void AppendAllText(string path, string contents);
  • path: 要将指定的字符串追加到的文件
  • contents: 要追加到文件中的字符串
  • encoding: 要使用的字符编码

- WriteAllBytes() [覆盖写入所有字节数组]

创建一个新文件,在其中写入指定的字节数组,然后关闭该文件。 如果目标文件已存在,则覆盖该文件

public static void WriteAllBytes(string path, byte[] bytes);
  • path: 要写入的文件
  • bytes: 要写入文件的字节

- WriteAllLines() [覆盖写入所有的符串数组/集合]

创建一个新文件,在其中写入指定的符串数组/字符串集合,然后关闭该文件

public static void WriteAllLines(string path, string[] contents);
public static void WriteAllLines(string path, string[] contents, Encoding encoding);
public static void WriteAllLines(string path, IEnumerable<string> contents);
public static void WriteAllLines(string path, IEnumerable<string> contents, Encoding encoding);
  • path: 要写入的文件
  • contents: 要写入文件的字符串数组/文件中的行
  • encoding: 要使用的字符编码

- WriteAllText() [覆盖写入所有字符串]

创建一个新文件,使用指定编码向其中写入指定的字符串,然后关闭文件。 如果目标文件已存在,则覆盖该文件

public static void WriteAllText(string path, string contents);
public static void WriteAllText(string path, string contents, Encoding encoding);
  • path: 要写入的文件
  • contents: 要写入文件的字符串
  • encoding: 要使用的字符编码

- ReadAllBytes() [读取字节数组]

打开一个二进制文件,将文件的内容读入一个字节数组,然后关闭该文件

public static byte[] ReadAllBytes(string path);
  • path: 要打开以进行读取的文件
  • 返回结果: 包含文件内容的字节数组

- ReadAllLines() [读取字符串数组行]

打开一个文件,使用指定的编码读取文件的所有行,然后关闭该文件

public static string[] ReadAllLines(string path);
public static string[] ReadAllLines(string path, Encoding encoding);
  • path: 要打开以进行读取的文
  • encoding: 应用到文件内容的编码
  • 返回结果: 包含文件所有行的字符串数组

- ReadAllText() [读取字符串所有行]

打开一个文件,使用指定的编码读取文件的所有行,然后关闭该文件

public static string ReadAllText(string path);
public static string ReadAllText(string path, Encoding encoding);
  • path: 要打开以进行读取的文
  • encoding: 应用到文件内容的编码
  • 返回结果: 包含文件所有行的字符串

- ReadLines() [读取字符串一行]

读取具有指定编码的文件的行

public static IEnumerable<string> ReadLines(string path);
public static IEnumerable<string> ReadLines(string path, Encoding encoding);
  • path: 要读取的文件
  • encoding: 要使用的字符编码
  • 返回结果: 该文件的所有行或查询结果所示的行

2. FileInfo类
- DirectoryName { get; } [获取完整路径]
- Length { get; } [获取文件大小]
- Name { get; } [获取文件名]
- IsReadOnly { get; set; } [获取/设置只读]
- Exists { get; } [是否存在]
- CopyTo() [复制文件]
- Create() [(FileStream)打开文件]
- Delete() [删除文件]
- MoveTo() [移动文件]
- CreateText() [(StreamWriter)新建文件]

创建写入新文本文件的 StreamWriter

public StreamWriter CreateText();
  • 返回结果: 一个新的 StreamWriter

- Open() [(FileStream)打开文件读/写]

用读、写或读/写访问权限和指定的共享选项在指定的模式中打开文件

public FileStream Open(FileMode mode);
public FileStream Open(FileMode mode, FileAccess access);
public FileStream Open(FileMode mode, FileAccess access, FileShare share);
  • mode: 一个 FileMode 常数,它指定打开文件所采用的模式(例如 Open 或 Append)
  • access: 一个 FileAccess 常数,它指定是使用 Read、Write 还是 ReadWrite 文件访问来打开文件
  • share: 一个 FileShare 常数,它指定其他 FileStream 对象对此文件拥有的访问类型

- OpenRead() [(FileStream)打开只读取]

创建一个只读的 FileStream

public FileStream OpenRead();
  • 返回结果: 一个新的只读的 FileStream 对象

- OpenText() [(StreamReader)打开只读取UTF8编码]

创建使用从现有文本文件中读取的 UTF8 编码的 StreamReader

public StreamReader OpenText();
  • 返回结果: 使用 UTF8 编码的新的 StreamReader

- OpenWrite() [(FileStream)打开只写入]

创建一个只写的 FileStream

public FileStream OpenWrite();
  • 返回结果: 新的或现有文件的只写非共享的 FileStream 对象

- AppendText() [(StreamWriter)打开追加写入]

创建一个 StreamWriter ,它向 FileInfo 的此实例表示的文件追加文本

public StreamWriter AppendText();
  • 返回结果: 一个新的 StreamWriter

3. FileStream 文件流 [二进制文件读写]
- Flush() [清空缓存]
- Dispose() [释放资源]
- Read() [(int)读取指定字节块到流]

从流中读取字节块并将该数据写入给定缓冲区中

public override int Read(byte[] array, int offset, int count);
  • array: 读取的字节数组缓冲区,该缓存区用来储存读取的数据
  • offset: 数组中的字节偏移量,字节读取的起点位置
  • count: 最多读取的字节数,读取的字节长度
  • 返回结果: 读入缓冲区中的总字节数, 如果字节数当前不可用,则总字节数可能小于所请求的字节数;如果已到达流结尾,则为零
  • 代码演示:
using System;
using System.IO;

namespace Test01
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建文件流用于操作文件
            FileStream fileStream = new FileStream("TextFile1.txt", FileMode.Open);
            //读取或者操作文件
            //1 byte=1字节 1024byte=1KB 
            // 从流中读取字节块并将该数据写入给定缓冲区中。
            byte[] buffer = new byte[1024];//数据容器 
            while (true)
            {
                int length = fileStream.Read(buffer, 0, buffer.Length);//读取数据到流中
                if (length == 0)
                {
                    Console.WriteLine("读取结束");
                    break;
                }
            }
            fileStream.Close();
            Console.ReadKey();
        }
    }
}

- ReadByte() [(int)读取一个字节到流]

从文件中读取一个字节,并将读取位置提升一个字节

public override int ReadByte();
  • 返回结果: 强制转换为 System.Int32 的字节;或者如果已到达流的末尾,则为 -1

- Write() [写入指定字节块到流]

将字节块写入文件流

public override void Write(byte[] array, int offset, int count);
  • array: 写入流的字节数组缓冲区,该缓存内容会被写入文件
  • offset: array 中的从零开始的字节偏移量,从此处开始将字节复制到该流
  • count: 最多写入的字节数
  • 代码演示:
using System;
using System.IO;

namespace Test01
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建 读/写 文件流
            FileStream readStream = new FileStream("Read.txt", FileMode.Open);
            FileStream writeStream = new FileStream("Write.txt", FileMode.Open);
            //1 byte=1字节 1024byte=1KB 
            //从流中读取字节块并将该数据写入给定缓冲区中。
            byte[] buffer = new byte[1024];//数据容器 
            while (true)
            {
                int length = readStream .Read(buffer, 0, buffer.Length);//读取数据到流中
                if (length == 0)
                {
                    Console.WriteLine("读取结束");
                    break;
                }
                else
                {
                    writeStream.Write(buffer, 0, buffer.Length);//从流中写入文件
                }
            }
            writeStream.Close();
            readStream.Close();
            Console.ReadKey();
        }
    }
}

- WriteByte() [写入一个字节到流]

一个字节写入文件流中的当前位置

public override void WriteByte(byte value);
  • value: 要写入流的字节

4. StreamReader [读取字符流]
- CurrentEncoding { get; } [获取流的编码类型]
- EndOfStream { get; } [是否在流结尾]
- Close() [关闭流]
- Dispose() [释放资源]
- Read() [(int)读取 字符/字符块 到流]
  1. 读取输入流中的下一个字符并使该字符位置提升一个字符
  • 返回结果: 输入流中表示为 System.Int32 对象的下一个字符。如果不再有可用的字符,则为 -1
  1. 从指定的索引位置开始将来自当前流的指定的最多字符读到缓冲区
  • 返回结果: 已读取的字符数,或者如果已到达流结尾并且未读取任何数据,则为 0。 该数小于或等于 count 参数,具体取决于流中是否有可用的数据
public override int Read();

//buffer: 读取的字符数组缓冲区,该缓存区用来储存读取的数据
//index: 在 buffer 中开始写入的位置
//count: 要读取的最大字符数
public override int Read(char[] buffer, int index, int count);
  • 代码演示:
using System;
using System.IO;

namespace Test01
{
    class Program
    {
        static string path = @"D:\临时存放处\Test.txt";
        static void Main(string[] args)
        {
            StreamReader reader = new StreamReader(path);
            //第一种重载
            while (true)
            {
                int res = reader.Read();
                if (res == -1)
                {
                    break;
                }
                else
                {
                    Console.Write((char)res);
                }
            }
            //第二种重载
            char[] c = new char[1024];
            int i = reader.Read(c, 0, c.Length);
            foreach (var item in c)
            {
                Console.Write(item);
            }
            reader.Close();
            Console.ReadKey();
        }
    }    
}

- ReadBlock() [(int)读取字符块到流]

从当前流中读取指定的最大字符数并从指定的索引位置开始将该数据写入缓冲区

public override int ReadBlock(char[] buffer, int index, int count);
  • buffer: 读取的字符数组缓冲区,该缓存区用来储存读取的数据
  • index: 在 buffer 中开始写入的位置
  • count: 要读取的最大字符数
  • 返回结果: 已读取的字符数。 该数字将小于或等于 count,取决于是否所有的输入字符都已读取

- ReadLine() [(string)读取一行字符串到流]

从当前流中读取一行字符并将数据作为字符串返回

public override string ReadLine();
  • 返回结果: 输入流中的下一行;如果到达了输入流的末尾,则为 null
  • 代码演示:
using System;
using System.IO;

namespace Test01
{
    class Program
    {
        static string path = @"D:\临时存放处\Test.txt";
        static void Main(string[] args)
        {
            StreamReader reader = new StreamReader(path);
            while (true)
            {
                string str = reader.ReadLine();
                if (str == null)
                {
                    break;
                }
                else
                {
                    Console.WriteLine(str);
                }
            }
            reader.Close();
            Console.ReadKey();
        }
    }
}    

- ReadToEnd() [(string)读取所有字符串到流]

读取来自流的当前位置到结尾的所有字符

public override string ReadToEnd();
  • 返回结果: 字符串形式的流的其余部分(从当前位置到结尾)。 如果当前位置位于流结尾,则返回空字符串 (“”)
  • 代码演示:
using System;
using System.IO;

namespace Test01
{
    class Program
    {
        static string path = @"D:\临时存放处\Test.txt";
        static void Main(string[] args)
        {
            StreamReader reader = new StreamReader(path);
            Console.WriteLine(reader.ReadToEnd());
            reader.Close();
            Console.ReadKey();
        }
    }
}    

5. StreamWriter [写入字符流]
- Encoding { get; } [获取编码格式]
- Close() [关闭流]
- Flush() [清除缓存]
- Write() [写入字符流]
//将字符写入流
//value: 要写入流中的字符
public override void Write(char value);

//将字符数组写入流
//buffer: 要写入的数据的字符数组
//index: 缓冲区中的字符位置
//count: 要写入的最大字符数
public override void Write(char[] buffer, int index, int count);

//将字符串写入流
//value : 要写入流中的字符串,如果 value 是 null,则不写入
public override void Write(string value);

//将字符数组写入流
//buffer: 要写入的数据的字符数组
public override void Write(char[] buffer);
  • 代码演示:
using System;
using System.IO;

namespace Test01
{
    class Program
    {
        static string readpath = @"D:\临时存放处\Reader.txt";
        static string writepath = @"D:\临时存放处\Writer.txt";
        static void Main(string[] args)
        {
            StreamReader reader = new StreamReader(readpath);
            StreamWriter writer = new StreamWriter(writepath);
            //方法1 完全读取完全写入
            string str = reader.ReadToEnd();
            writer.Write(str);
            //方法2 分段读取分段写入
            while(true)
            {
                string str2 = reader.ReadLine();
                if (str2 == null)
                {
                    break;
                }
                writer.Write(str2);//不换行
                writer.WriteLine(str2);//换行
            }
            reader.Close();
            writer.Close();
        }
    }
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值