- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
编辑,抱歉,这个问题显然与 failbit not being set when seekg seeks past end of file (C++,Linux) 重复
要到达我所在的位置,首先在终端中触摸一个文件以创建一个空文件(linux 或 mac):
touch test.file
然后编译并执行这段代码
#include <fstream>
#include <iostream>
int main()
{
std::fstream stream("test.file", std::ios::in | std::ios::out | std::ios::binary);
stream.seekp(54765476543); // arbitrarily large number
std::cout<<"stream.tellp() "<<stream.tellp()<<std::endl;
std::cout<<"stream.bad()? "<<stream.bad()<<std::endl;
std::cout<<"stream.fail()? "<<stream.fail()<<std::endl;
stream << "test";
stream.flush();
stream.close();
return 0;
}
使用你最喜欢的 c++ 编译器(我在 linux 上尝试了 Apple LLVM 4.2 (clang-425.0.28) for clang++ 和 i686-apple-darwin11-llvm-g++-4.2 for g++ and g++ (Debian 4.7.2-5) )
例如
clang++ testStream.cpp -o ts
当我运行“ts”时,我得到了输出:
stream.tellp() 54765476543
stream.bad()? 0
stream.fail()? 0
这就是我的困惑出现的地方:我认为 tellp() 会给出“-1”(因为我试图寻找结束)并且 stream.fail() 至少等于 true。这种行为是不确定的还是我遗漏了什么?
更奇怪的是,当我这样做的时候
ls -lh test.file
我明白了
-rw-r--r-- 1 bjones users 51G Aug 13 04:32 test.file
现在很明显该文件的大小不是 54G。终于当我这样做了
cat test.file
要查看是否实际写入了任何内容,输出会挂起。
上述行为是否正确?
谢谢,
本。
最佳答案
在文件末尾执行 seekp()
并没有错(然后可能写入文件)
您确实是在通过向前移动光标来写入此文件。
文件真的是否有那么大(如果它是 sparse file )完全取决于您的操作系统/文件系统:就 C++ 而言,这是有效的。
关于c++ - 这种关于 seekp 的看似奇怪的行为是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25281812/
在这个程序中我想改变文件中的一些值。现在我以附加模式打开文件并将我的 seekp 指针移动到我给定的位置。但问题是它在文件末尾写入数据而不是那里有 seekp 指针。 #include #includ
我在以二进制模式替换文件的一部分时遇到了一些问题。出于某种原因,我的 seekp() 行没有将文件指针放在所需位置。现在它将新内容附加到文件末尾,而不是替换所需的部分。 long int pos; b
执行以下代码后文件的内容应该是什么 int main (int, char**) { std::string s1 {"Hello world"}; std::string s2 {"
如果我在文件末尾执行 seekp 然后 write 会发生什么?我希望发生的是该文件会自动扩展到 seekp 位置的大小。如果是这样,它是否也通过向磁盘写入任何内容来填充文件的旧末尾和新位置之间的空间
以下代码适用于双向流并从文件中查找记录 ID,然后从文件中替换该记录的内容。但是在覆盖内容之前,它会将 put 指针移动到 get 指针的位置。通过tellp()和tellg()发现它们在移位前都已经
我正在尝试使用 C++ 在文件的特定位置写入条目 基本上我有 ofstream ofs("file.dat", ios::binary | ios::app); ofs.seekp(220, ios:
编辑,抱歉,这个问题显然与 failbit not being set when seekg seeks past end of file (C++,Linux) 重复 要到达我所在的位置,首先在终端
每当我想将位置设置为 X tellp return -1 时,fstream 中的 seekp() 有一个小问题。 代码: fstream file("Riot.exe", ios::in | ios
这个程序应该创建一个名为 Record.bin 的二进制文件,然后将用户输入的所有信息写入该文件。现在它到达了它在 Student B[10] 中读取的部分,并且它正确读取了 B[0],但是 B[]
我用 C++ 编写了以下代码,将 Student 对象写入文件,然后使用 seekp() 将输出指针移动到特定位置,在该位置我编写了一个 Student 对象,该对象替换了该位置的先前对象,并保留了其
我有以下代码: #include #include #include using namespace std; int main() { fstream in("test.txt");
我正在尝试写入以将数据追加到文件末尾,并且正在使用 seekp(streamoff off, ios_base::seekdir dir) 函数但它不追加,不知何故它在中间写入数据的文件。我尝试像这样
描述:我有一个包含几行的文本文件,我想在两行之间写入。 我尝试了什么: 我有一个循环来确定我想写的位置。当我尝试打开文件时,使用 seekp 定位输入,然后写入文件被截断。 示例 文件.txt: He
我刚刚注意到,通过“seekp”在 microsoft visual studio 中更改位置,我在处理文件时也隐含地更改了读取位置。 我想知道这是否是“可移植”行为?我可以期望阅读和写作的位置始终相
为我糟糕的英语道歉。我被 C++ 中的 fstream 困住了。这是我的代码。 #include #include using namespace std; struct TestStruct {
我创建了一个类 Student。 学生类: class Student { friend ostream& operator(&s), sizeof(s)); return s
我在 Debian x64 PC 上运行的 c++ 程序有一个奇怪的行为。 我无法设法先读取文件,然后写入另一个值,然后再读取这些值。我已经阅读了很多信息,包括关于 stackoverflow 的问题
我正在编写一个方法来替换二进制文件中的指定字符串,它在我用 seekp 设置的位置之前写入 NULL,然后写入字符串并关闭流。我只想替换文件中的一些字节。在这段代码之前,我尝试使用带有 ios::bi
一位面试官问我如何实现 tail(是的,linux shell 中的那个)。我的回答是,先寻找到文件的末尾,然后一个接一个地向前读取字符,如果遇到 \n,则表示一行已关闭,等等。我认为我的答案是正确的
我正在寻找一些关于 seekg() 和 seekp() 在写入文件时如何工作的说明。比如说我有一个像这样的文件: offset 0: 2 offset 4: 4 offset 8: 6 offset
我是一名优秀的程序员,十分优秀!