文本文件和普通文件中的Eol是什么
What is Eol in text file and normal file?
现在我对我使用c++时的行尾字符感到非常困惑,我知道文本文件有一个行尾标记,它设置了单个shiffing运算符(>>)读取一行的限制。数据被连续读取,直到eol字符不存在,并且在文本模式下打开文件时,回车(CR)被转换为作为eol标记的CRLF在我的文本中添加空白,那么它会充当eol的制造者吗。
现在我创建了一个正常的文件,即没有.txt的文件例如
ifstream("test"); // No .txt
在这种情况下,什么是eol标记
文件名末尾的".txt"只是一种约定。它只是文件名的部分。
它并不意味着文件有任何神奇的特性,当然也不会改变操作系统内核或文件系统驱动程序处理文件的方式。
那么,简而言之,有什么区别呢无
我知道文本文件有一个行尾标记,它设置了单个屏蔽操作员(>>)读取一行的限制
这是不正确的。
数据被连续读取,直到eol字符不适用于
也不正确。一些操作系统(例如Windows IIRC)将EOF(而不是EOL!)字符注入流中,以向调用应用程序表示没有更多数据可读取。其他操作系统甚至不这么做。但在这两种情况下,实际文件的末尾都没有实际的EOF字符。
当以文本模式打开文件时,回车(CR)被转换为CRLF,它是eol标记
这种转换可能会发生,也可能不会发生,不管怎样,EOL都不是EOF。
如果我在文本中添加空白,那么它会充当eol生成器吗。
这是一个消极的、星形的命令。
我不确定你是从哪里得到这些东西的,但你大错特错了。我建议亚马逊写一本关于计算机操作系统如何工作的、经过同行评审的、推荐良好的书。
在C++中使用提取运算符>>读取字符串时,默认情况是跳过空格。
如果希望整行都一字不差,请使用std::getline
。
典型的输入回路是:
int main(void)
{
std::string text_from_file;
std::ifstream input_file("My_data.txt");
if (!input_file)
{
cerr << "Error opening My_data.txt for reading.n";
return EXIT_FAILURE;
}
while (input_file >> text_from_file)
{
// Process the variable text_from_file.
}
return EXIT_SUCCESS;
}
许多旧的大型机操作系统都需要所有数据文件的记录结构,对于文本文件,这些数据文件源自80列的Hollerith(穿孔)卡,并通过磁盘文件记录、磁带、输出穿孔卡组和行式打印机行忠实地保存。没有使用行尾,因为记录结构要求每条记录有80列(通常用空格填充)。在后来的几年(20世纪60年代以上),拥有最多80列的可变长度记录变得流行起来。如今,即使是OpenVMS仍然要求文件创建者指定文件格式(顺序、索引或"流")和记录大小(固定、可变),其中必须提前指定最大记录大小。
在现代计算时代(实际上始于Unix),人们普遍认为在数据文件上强制使用结构是个坏主意。任何程序员都可以自由地自己做这件事,并且有很多面向记录的数据格式,如编译器/链接器对象文件(.obj、.so、.o、.lib、.exe等),以及大多数媒体格式(.gif、.tif、.flv、.mov、mp3等)
对于通信文本行,范例是以终端或打印机为目标,为此,应该指示行结尾。大多数操作系统环境(MSDOS和Windows除外)都使用以ASCII编码的n
字符作为换行(ASCII 10)代码。MSDOS和ilk使用"\r\n",编码为回车后换行(ASCII 13,10)。这两种方案都有优点和缺点。但文本文件也可能包含其他控件,最常见的是以特定方式控制设备的ANSI转义序列:
- 部分或全部清除屏幕
- 弹出打印机页面、跳过某些行、反向进纸和其他很少使用的功能
- 建立滚动区域
- 更改文本颜色
- 选择字体、文本权重、页面大小等
对于这些操作,行结束不是一个问题。
此外,用ASCII编码的数据文件,如JSON和XML(尤其是嵌入Javascript的HTML),可能没有任何行结尾,尤其是在数据被模糊或压缩时。
回答您的问题:
我对我使用c++时的行尾字符很困惑,我知道文本文件有一个行尾标记
也许吧。也许不是。从C或C++程序的角度来看,编写n
向运行时环境指示一行的结束。系统对此所做的操作因运行时操作环境而异。对于Unix和Linux,不会发生转换(尽管写入类似终端的设备会转换为rn
)。在MSDOS中,"\n"被翻译为rn
。在OpenVMS中,将删除"\n",并设置该记录的大小。阅读是反译。
它设置了读取单个屏蔽运算符(>>)的行的限制。
没有这样的限制:如果程序愿意,可以选择逐字节读取数据,也可以忽略行边界。
"移位运算符"是为文件流重载的,用于输入或输出数据,但与比特旋转移位无关。选择这些运算符是为了对输入/输出进行视觉近似,并且由于它们的运算符优先级较低。
数据被连续读取,直到eol字符不适用于
这一点令人困惑:我认为您的意思是直到eol字符出现,这确实是面向行的函数gets()
和fgets()
的工作方式。
在文本模式下打开文件时,回车(CR)被转换为CRLF,它是eol标记,所以如果我在文本中添加空格,它会充当eol标记吗。
打开文件不会转换任何内容,但从文件中读取可能会转换。然而,没有任何环境(据我所知)将输入转换为CR LF。MSDOS在输入上将CR LF转换为n
。
添加空格对行尾、文件尾或任何内容都没有影响。空间只是数据。然而,读/写数字和其他一些数据类型的C++流操作使用空格(一系列空格、水平制表符、垂直制表符、表单提要,也许还有其他一些)作为分隔符。此便利功能可能会引起一些混淆。
现在我创建了一个正常的文件,即没有.txt的文件,例如
ifstream("测试");\无.txt
在这种情况下,什么是eol标记
文件名不是决定文件类型。事实上,file.txt
可能根本不是一个文本文件。使用特定的文件扩展名可以方便地传达文件的目的,但这不是强制性的。
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 正在分析具有CR LF EOL结构的.csv文件
- 如何在最后一次EOL后删除文件的内容
- 文本文件和普通文件中的Eol是什么
- 如何更改txt文件中的EOL编码