- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我看到了 istream::seekg 的奇怪行为。具体来说,它似乎当我寻找明显远离文件末尾的点时,不要设置故障位。
根据我在文档中了解到的信息,应该设置故障位,但实际上并没有。
谁能解释这种行为?相关代码片段:
class Tester
{
...
void testTriggered()
{
fs.open("/pathtofile/testFile.TEST", std::ios_base::in|std::ios_base::binary);
prv_testbits("testTriggered(): OpeningFile");
fs.seekg(2000,std::ios_base::beg);
prv_testbits("testTriggered(): seekTwoThousand");
int g = fs.tellg();
std::cout << "get pointer is:" << g << std::endl;
}
void prv_testbits(std::string msg){
if (fs.fail()) {
std::cout << msg << ": failbit set." << std::endl;
} else {
std::cout << msg << ": failbit NOT set." << std::endl;
}
if (fs.bad()) {
std::cout << msg << ": badbit set." << std::endl;
}else {
std::cout << msg << ": badbit NOT set." << std::endl;
}
if (fs.eof()) {
std::cout << msg << ": eofbit set." << std::endl;
} else {
std::cout << msg << ": eofbit NOT set." << std::endl;
}
}
....
private:
std::ifstream fs;
};
输入文件由二十个字节组成: 0123456789abcdefghij
sample 运行的输出:
testTriggered(): OpeningFile: failbit NOT set.
testTriggered(): OpeningFile: badbit NOT set.
testTriggered(): OpeningFile: eofbit NOT set.
testTriggered(): seekTwoThousand: failbit NOT set.
testTriggered(): seekTwoThousand: badbit NOT set.
testTriggered(): seekTwoThousand: eofbit NOT set.
get pointer is:2000
g++ 版本信息:$ g++ -v使用内置规范。目标:x86_64-linux-gnu配置为:../src/configure -v --with-pkgversion='Ubuntu 4.4.3-4ubuntu5' -with-gxx-include-dir=/usr/include/c++/4.4 [snip]gcc 版本 4.4.3 (Ubuntu 4.4.3-4ubuntu5)
$ uname -aLinux hostx 2.6.32-36-server #79-Ubuntu SMP 11 月 8 日星期二 22:44:38 UTC 2011 x86_64 GNU/Linux
最佳答案
fseek()
的 Open Group 规范(可能用于实现 fstream::seekg
)需要允许超出当前文件末尾的文件位置:
The fseek() function shall allow the file-position indicator to be set beyond the end of existing data in the file. If data is later written at this point, subsequent reads of data in the gap shall return bytes with the value 0 until data is actually written into the gap.
http://pubs.opengroup.org/onlinepubs/009696699/functions/fseek.html
关于c++ - 当 seekg 寻找超过文件末尾时未设置 failbit (C++,Linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11022417/
我正在尝试制作一个随机名称生成器。问题是为了获得文件中的行数,我必须遍历它。 所以当我需要在 getRandomName() 中再次循环获取名称时,它已经到达文件末尾 我尝试使用 seekg(0, s
我有一个文本文件: 1 2 3 4 5 6 7 8 9 我想用seekg()读取一个特定的数字 ifstream fr("duomenys.txt"); fr.seekg(2,ios::beg); i
在下面的代码中,我计算了字数、行数,然后计算了文本文件的大小。第一次使用 seekg 在第一个 while 循环后工作正常,但在第二个 while 循环后,它不起作用。它给出输出中所示的值。 #inc
我有一个非常大的 (950GB) 二进制文件,我在其中存储了 10 亿个 float 序列。 我拥有的长度为 3 的文件类型的一个小例子可能是: -3.456 -2.981 1.244 2.453 1
我有一个 2884765579 字节的文件。这是用这个函数双重检查的,它返回那个数字: size_t GetSize() { const size_t current_position
#include #include int main() { std::string str; char magic[9]; std
我有一个小程序,旨在从文件中复制一个小短语,但似乎我对 seekg() 的工作方式有误,或者我的代码阻止函数按预期工作。 文本文件包含: //Intro previouslyNoted=false 这
我有一个函数(遗留)读取文件的前几行以确定其类型,然后关闭并重新打开文件,以便它可以使用正确的解释器重新读取整个文件。要点是: void readFile(const char *filename)
我正在使用 Visual C++ 2010 开发 MFC 应用程序 我正在读取一个文件的数据,但似乎 seekg 不工作 这是我的代码 //Transaction is a class i have
所以我尝试使用 cin.get() 两次读入一串字符。输入被重定向为“程序 int main() { std::cin.seekg(1, std::ios::beg); if (std::ci
在对文件使用 seekg 和 tellg 的场景中,我想知道幕后发生了什么? // Open file and get file size int myFileSize; st
在尝试以文本模式 (Windows) 读取一个简单的 ANSI 编码文本文件时,我遇到了 seekg() 和 tellg() 的一些奇怪行为;任何时候我尝试使用 tellg(),保存它的值(作为 po
我正在尝试编写一些简单的代码来读取文本文件,但会读取第一行两次。我认为这会像这样简单 std::ifstream file; file.open("filename", std::io
所以,我很好奇,因为我一直在使用这种相当有用的方法来获取文件的大小,但有些事情困扰着我。将流锁定到文件系统上的文件和 fileStream.seekg(0, std::ios::beg); int b
我正在玩 ifstream 以熟悉它。我正在尝试使用 seekg 来判断文件的位置,但它给了我错误的结果。 想法是: 打开文件 打印文件位置 从文件中读取一个字符 打印文件位置 从文件中读取一个字符
下面的程序应该输出如下内容: Begin found space found End found 但事实并非如此。 #include #include #include #include #i
我正在尝试备份 ifstream 中的一行。 file.tellg() 正在返回一个我没有预料到的值。在下面的示例中,在读取第一行(长度为 15 个字符的字符串)后,我希望 file.tellg()
我正在尝试从特定偏移量读取二进制数据。 我是这样写数据的: long RecordIO::writeRecord(Data *record) { this->openWrite();
代码如下: #include #include #include using namespace std; int main(int argc, char *argv[]) { string
我正在尝试将 bmp 文件读入字符缓冲区,并使用进程间通信将其传输到进程间。我使用以下代码完成了此操作: std::ifstream ImageFile; char* str=ne
我是一名优秀的程序员,十分优秀!