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

news2024/11/27 14:44:49

目录

    • 前言
      • 一、File.ReadAllLines
        • 参数
        • 返回
        • 例子
      • 二、File.ReadAllText
        • 参数
        • 返回
        • 例子
      • 注意事项
      • 可能出现的问题
      • 总结

前言

最近在做文件存储以及读取的时候,需要用到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);
}

这里我们多打印了一下字符串的长度
在这里插入图片描述
我们可以发现,字符串为1,2,3,4,5的,长度却是2
我们获得的contents是经过Split处理的,理所应当被分割出来的字符串数组应该是1,2,3,4,5。但为什么对应字符串长度是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是回车符,也就是\r,10是换行符,也就是\n
在这里插入图片描述
为了验证我们的想法,打个断点进去看看
在这里插入图片描述

总结

  1. 尽量使用File.ReadAllLines处理需要换行处理的文件
  2. 需要注意Windows下,敲下Enter键是会生成两个字符:\r和\n

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/166864.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习基础理念(一)

文章目录1. 机器学习 Machine Learing机器学习类别2. 机器如何找函数深度学习输入类型和输出类型机器如何找函数的1. 机器学习 Machine Learing 什么是机器学习,顾名思义 机器 拥有会学习的能力,机器学习就是让机器具备能够找函数的能力 机器学习就是找…

【C语言课程设计】通讯录(1.0版本)

前言 相信各位对于通讯录都不是很陌生吧。通讯录我们在学校的大作业,课程设计经常会去使用它。那么今天我们将使用C语言来实现一个简单的通讯录。 目录 前言 一、通讯录的需求 二、工程文件的创建 三、通讯录的声明和定义 四、通讯录各函数的声明和定义 五、通…

Mysql入门技能树-数据查询-练习篇

SELECT 下列 SQL 语句,哪一项不合法? 答案是:C select now(),3.14 now() |3.14| ----------------------- 2023-01-16 16:47:04|3.14|MySQL查询表中所有的数据可以通过“SELECT * 通配符”或者“SELECT 所有字段”实现。 SE…

hadoop3.x源码编译及cmake的问题解决:CMake failed with error code 1

一、准备工作 基础环境:centos7 (1)官方源码中编译之前对基础环境及版本的要求(重点是红色部分) Requirements: * Unix System* JDK 1.8 * Maven 3.3 or later * ProtocolBuffer 2.5.0 * CMake 3.1 or newer (if com…

OSCP-Vulnhub靶机记录-Hacker_Kid-v1.0.1

Vulnhub靶机记录-Hacker_Kid-v1.0.1介绍&安装信息收集页面源代码DIG信息收集xxe漏洞探测9999端口SSTI模板注入发现具有Capabilities特殊操作权限的程序原理介绍&安装 靶机名称:Hacker_Kid-v1.0.1 靶机难度:中等 虚拟机环境:此靶机推…

【Linux】线程互斥

目录🌈前言🌸1、Linux线程互斥🍧1.1、线程间互斥相关背景概念🍨1.2、互斥量(锁)相关背景🍯1.3、互斥量(锁)相关API🍯1.3.1、初始化和销毁互斥锁🍰1.3.2、互斥量加锁和解锁🍲1.3.3、互…

Python爬虫403错误的解决方案

前言程序使用一段时间后会遇到HTTP Error 403: Forbidden错误。 因为在短时间内直接使用Get获取大量数据,会被服务器认为在对它进行攻击,所以拒绝我们的请求,自动把电脑IP封了。 解决这个问题有两种方法。一是将请求加以包装,变成…

1.浮动float

提示:如果多一个盒子(都设置浮动,则它们会按照属性值一行内显示并且顶端对齐排列) 注意: 浮动的元素是互相贴靠在一起的,(没有缝隙),如果父级宽度装下这些浮动盒子&#…

MyBatis 详解 (2) -- 增删改操作

MyBatis 详解 2 -- 增删改操作前言一、准备工作1.1 创建数据库和表1.2 添加实体类1.3 添加 mapper 接口 (数据持久层)1.4 创建与接口对应的 xml 文件二、增加操作2.1 默认返回受影响的行数2.2 特殊的新增:返回自增 id三、删除操作四、修改操作五、实现完整交互5.1 添…

爆肝9万字,我已从小白晋升ARM嵌入式工程师!带你从零熟悉常用的M4嵌入式功能,建议收藏(含码源)

📚 前言 📑博客主页:丘比特惩罚陆 💖欢迎关注:点赞收藏⭐留言✒ 💬系列专栏:web前端、嵌入式、笔记专栏 🎮 加入社区: 丘比特惩罚陆 🥇人生格言:选…

【教学赛】金融数据分析赛题1:银行客户认购产品预测(0.9676)

本文是对天池教学赛,银行客户认购产品预测的记录,教学赛网址如下: 【教学赛】金融数据分析赛题1:银行客户认购产品预测_学习赛_天池大赛-阿里云天池 1. 读取数据 import pandas as pd# 加载数据 train pd.read_csv(train.csv) …

P5587 打字练习————C++

题目 打字练习 题目描述 R 君在练习打字。 有这样一个打字练习网站,给定一个范文和输入框,会根据你的输入计算准确率和打字速度。可以输入的字符有小写字母、空格和 .(英文句号),输入字符后,光标也会跟…

c语言小练pintia11-20

11.计算平均分已知某位学生的数学、英语和计算机课程的成绩分别是87分、72分和93分,求该生3门课程的平均成绩(结果按整型输出)。输入格式:本题无输入输出格式:按照下列格式输出结果:math 87, eng 72, com…

深耕地市区县市场,新华三智行中国走新路

2022年就这样结束了,但是企业数字化的进程从未结束。回顾这一年,对于任何企业而言,数字化优先的战略仍然在继续。不仅如此,数字化走向地市区县市场,带来了更多的机遇和发展,让我们看到了中国的数字经济还有…

Flurry iOS端调研和使用

Flurry iOS端调研使用 flurry官方资料较少,且只有英文文档没有代码demo。公司项目确定要用Flurry,所以深入调研,顺便记录过程。有需要的小伙伴也可以顺便参考 一.创建应用拿api_key 官网:https://www.flurry.com/ 用邮箱去官网…

【目标检测】55、YOLOv8 | YOLOv5 团队 Ultralytics 再次出手,又实现了 SOTA

文章目录一、YOLO 系列算法的简单回顾二、YOLOv8 简介2.1 安装和简单使用2.2 Ultralytics HUB2.2.1 Upload Dataset2.3 YOLOv8 主要改动三、YOLOv8 细节详述论文:暂无 官方文档:https://docs.ultralytics.com/ 代码:https://github.com/ult…

【算法数据结构初阶篇】:链表问题

一、反转单双链表 一、数据结构图 二、代码演示 public class Code01_ReverseList {public static class Node {public int value;public Node next;public Node(int data) {value data;}}public static class DoubleNode {public int value;public DoubleNode last;public …

Spring Cloud Gateway从注册中心自动注册配置路由信息

环境信息Spring Boot:2.0.8.RELEASESpring Boot内置的tomcat:tomcat-embed-core 8.5.37Spring Cloud Gateway:2.0.4.RELEASENacos:2.0.4.RELEASE需求Spring Cloud Gateway注册到注册中心(这里是Nacos,其它注…

Spring学习系列(二)

Spring_特殊值的注入问题和各种类型的自动装配1.set两种方式的区别第4中赋值方式:自动装配(只适用于ref类型)使用注解定义bean1.set两种方式的区别 (1)把值写到value属性里面,必须加引号,写到子…

【学习】计算机系统硬件和数据结构

学习内容描述: 1、CPU包含哪些部分? 2、数据结构基础知识。 重点知识: 1、CPU(中央处理器,Central Processing Unit) 主要包括运算器、控制器两大部件;内部结构包含控制单元、运算单元、存储单元和时钟等几个主要部…