gpt4 book ai didi

c++ - 如何读取文件末尾的第 6 个字符 - ifstream?

转载 作者:太空宇宙 更新时间:2023-11-04 14:42:10 27 4
gpt4 key购买 nike

void maintainFileName ()
{
std :: ifstream myfile;
myfile.open ("zoomLevels.txt");

if (myfile.is_open ())
{
// Move to end of the file,
myfile.seekg (0, std::ios::end);

// and then six characters back to pick up the last file number.
myfile.seekg (6, std::ios::beg);

int len = 1;
char *t = new char[len];

myfile.read(t, len);
qDebug () << "\nt: " << *t << "\n";
}
else
{
qDebug () << "\nsorry";
}
}

该文件包含以下内容:

78.8115,29.582,1,01.rda
78.8115,29.582,2,02.rda
76.3671,30.2201,1,11.rda
76.3671,30.2201,2,12.rda
78.1908,30.3007,1,01.rda
78.1908,30.3007,2,02.rda
77.3284,29.1415,1,01.rda
77.3284,29.1415,2,02.rda
77.3064,29.1655,1,01.rda
77.3064,29.1655,2,02.rda

该函数返回的值为5,而从末尾算起第六个字符为0!
我哪里错了?

最佳答案

查找文本文件中的任意位置是未定义的行为。在实践中,它可能会在各种 Unices 下工作,但不在任何地方别的。如果以二进制模式打开文件,则查找是合法的。形式上,如果你以二进制模式打开文件,你可能会得到额外的 nul末尾的字节,但实际上,今天这不是问题。如果你以二进制模式打开它,但是,您可能会看到其他东西而不是数据中的'\n';例如,在 Windows 下,您会看到两个字符序列 0x0D, 0x0A.

当然,在你的代码中,你是从头开始寻找,而不是从结束。这也是未定义的行为,但大多数时候,它会只要你在第一行寻找工作。

最后,您显示的数据中倒数第六个字符是'2',而不是 '0',如您所写。但是,当然,在除Unix,你可以很容易地看到其他东西(或得到一个错误):可能是'.' 在 Windows 下,或者在某些大型机操作系统下的错误(或者可能是 '' ')。

关于c++ - 如何读取文件末尾的第 6 个字符 - ifstream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12276834/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com