【问题标题】:Checking line breaks (newline characters) with CFile使用 CFile 检查换行符(换行符)
【发布时间】:2016-10-05 12:52:03
【问题描述】:

我需要使用CFile 检查文件是否以换行符结尾。 我尝试过的:

  1. 将文件指针指向文件末尾
  2. 将指针向后移动 2 个单位
  3. 检查指针是否指向\r\n

这是我的代码:

cfile.SeekToEnd();
cfile.Seek(-2, CFile::current);
char buffer[2];
cfile.Read(buffer, 2);
if(buffer[0] == '\r' && buffer[1] == '\n') printf("Ended with line break!");
else printf("Not ended with line break!");

但是,我发现缓冲区给了我一个 \n 字符和一个垃圾字符(具有奇怪的值,例如 204)。通过文档进行一些研究后,我发现CFile::Read 仅将\r\n 计为单个字符:

对于文本模式文件,回车-换行对被计为单个字符。

我很困惑,因为文件指针显然仍然计算 2 个字符,但我无法同时获得它们。有什么方法可以用 CFile 检查文件末尾的换行符吗?

【问题讨论】:

  • 我们不知道cfile 是什么类型。它是CFile 还是从它派生的东西(如CStdioFile)?顺便说一句,您为什么不直接调用cfile.Seek(-2, CFile::end); 而不是前两行?
  • 哦,cfile.Seek(-2, CFile::end); 也是个好主意。但是我仍然得到相同的结果。顺便说一句,我正在使用CFile

标签: c++ mfc newline cfile


【解决方案1】:

我在打开文件时使用CFile::typeBinary 解决了这个问题。

似乎CFile::typeText 做了一些特殊的处理回车换行对(例如,填写一个应该是回车的垃圾字符),这在我的情况下是不需要的。

【讨论】:

    猜你喜欢
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 2015-03-18
    相关资源
    最近更新 更多