Unity学习笔记--File.ReadAllLines和File.ReadAllText的使用以及注意事项(一定要看到最后!!!)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

目录

前言

最近在做文件存储以及读取的时候需要用到C#给我们提供的类File
具体使用方法可以看官方文档C# File 类
这篇文章只会说File.ReadAllLinesFile.ReadAllText的使用以及注意事项

Tips一定要看到最后

一、File.ReadAllLines

重载操作
ReadAllLines(String)打开一个文本文件读取文件的所有行然后关闭该文件。
ReadAllLines(String, Encoding)打开一个文件使用指定的编码读取文件的所有行然后关闭该文件。
public static string[] ReadAllLines (string path);

参数

String
要打开以进行读取的文件。

返回

String[]
包含文件所有行的字符串数组。

例子

现在假设我的文件路径是‪ C:\Users\Admin\Desktop\log.txt
内容如下
在这里插入图片描述
文本格式如下

1
2
3
4
5

现在我们利用 File.ReadAllLines 读取文件内容并且打印出来

string file_path = "C:/Users/Admin/Desktop/log.txt";
string[] contents = File.ReadAllLines(file_path);
foreach (string content in contents)
{
    Debug.Log(content);
}

在这里插入图片描述

二、File.ReadAllText

重载操作
ReadAllText(String)打开一个文本文件读取文件的所有行然后关闭该文件。
ReadAllText(String, Encoding)打开一个文件使用指定的编码读取文件的所有行然后关闭该文件。
public static string ReadAllText (string path);

参数

String
要打开以进行读取的文件。

返回

String
包含文件中所有文本的字符串。

例子

文件路径和内容同上

现在我们利用 File.ReadAllLines 读取文件内容并且打印出来

string file_path = "C:/Users/Admin/Desktop/log.txt";
string content = File.ReadAllText(file_path);
Debug.Log(content);

在这里插入图片描述

注意事项

如果在Windows下我们按下Enter键也就是我们常说的回车键其实内部会生成两个字符一个是 \r回车符 一个是 \n换行符如果是计算机专业的可能会熟悉点。

可能出现的问题

我们在编程的时候可能会使用File.ReadAllText来读取文件这个时候如果文件有很多换行那么这个时候比较常见的做法如下

string file_path = "C:/Users/Admin/Desktop/log.txt";
string content = File.ReadAllText(file_path);
string[] contents = content.Split("\n");

foreach(string s in contents)
{
    Debug.Log(s);
}

但是这样会有问题我们来测试下输出什么
在这里插入图片描述
看起来挺正常但是我们继续细化

foreach (string s in contents)
{
	Debug.Log("------------");
	Debug.Log("字符串" + s);
	Debug.Log("字符串长度" + s.Length);
}

这里我们多打印了一下字符串的长度
在这里插入图片描述
我们可以发现字符串为12345的长度却是2
我们获得的contents是经过Split处理的理所应当被分割出来的字符串数组应该是12345。但为什么对应字符串长度是2而不是1呢
其实如果认真读了上面的注意事项我们就不能发现我们现在是在Windows下测试的我们敲下的Enter键会生成两个字符一个是 \r回车符 一个是 \n换行符

windows下换行符是\r\n
\r回车\n换行
用二进制方式时是\r\n用文本方式时是\n
当你在记事本或word编辑时按下enter该软件默认的方式是插入回车\r,再插入换行\n

所以文本里面显示的是

1
2
3
4
5

但是存储在计算机中二进制形式如下

1\r\n2\r\n3\r\n4\r\n5\r\n

我们可以打印下文件内容

byte[] bs = File.ReadAllBytes(file_path);
Debug.Log(bs.Length);
foreach (byte ch in bs)
{
	Debug.Log(ch);
}

在这里插入图片描述
由于内部是由ASCLL码存储的所以我们查表得知13是回车符也就是\r10是换行符也就是\n
在这里插入图片描述
为了验证我们的想法打个断点进去看看
在这里插入图片描述

总结

  1. 尽量使用File.ReadAllLines处理需要换行处理的文件
  2. 需要注意Windows下敲下Enter键是会生成两个字符\r和\n
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6