fstream读/写移动文件指针
does fstream read/write move file pointer
这是一种简单的问题,我希望可以很容易地回答,文件流读写操作移动指针沿着吗?例如:
cpos=10000;
for (i=0;i<20;i++) {
dataFile.seekg(cpos+i,ios::beg);
dataFile.read(carray[i],1);
}
是否(逻辑上)与
相同?dataFile.seekg(cpos,ios::beg);
cpos=10000;
for (i=0;i<20;i++) {
dataFile.read(carray[i],1);
}
换句话说,无论使用哪种方法,carray[]是否包含相同的内容(我看不到第一种方法是有效的,所以我希望正确的答案是肯定的)。如果是,写操作是否表现出相同的行为?
是的,它就是这样工作的。不过,你的例子并不完全相同。第一个示例读取10000,然后是10001,然后是10002,等等。第二个需要在循环外寻道来设置初始位置。为了100%相等,您需要使第二个示例看起来像:
cpos=10000;
dataFile.seekg(cpos,ios::beg);
for (i=0;i<20;i++) {
dataFile.read(carray[i],1);
}
是,读写操作会自动移动文件指针. ...而不查找会大大提高的性能。同样,使用file.read(ptr, 20)
比使用20倍的file.read(ptr + i, 1)
要快得多。要获得相同的语义,您需要使用一次seek导航到适当的位置。
在文件流中查找将流设置为可以继续读或写字符的状态:对于以读写模式打开的流(std::ios_base::in | std::ios_base::out
),为了在读和写之间切换,有必要引入seek。因此,每个see以一种有趣的方式设置可用缓冲区,如果流只是读取或写入一个字符序列,则不需要这样做。此外,在写入时,每个seek至少检查是否有必要写入字符以进入代码转换的初始状态。
相关文章:
- 为什么当我尝试将char输入到int时,文件指针会卡住
- fprintf 不打印到文件,当文件指针在其他地方声明时
- 如何从NTFS中的$ MFT文件访问文件的每个块的文件指针
- 尽管文件指针正确,但在fclose()期间的segfault
- 当调用FREAD()函数时,文件指针如何移动
- C++如何复制文件 * 指针
- 如何将文件描述符 (int fd) 转换为文件指针 ( 文件* fp )
- Visual Studio 2010 调用 _locking() 失败 (errno = 22) 当文件指针高于 (2^
- 如何在 c++ 中查找文件指针位置
- c++文件指针工作不正常
- 做一个popen(),将文件*指针放入fstream中,pclose()呢?
- 在Linux中,多个进程使用文件指针读取文件时使用的共享虚拟内存
- 无法声明文件指针数组
- 将文件指针重定向到C/C++中的字符串
- 如何检查文件指针/描述符/句柄是否关联到同一个文件/管道/终端
- 在记录中定位文件指针
- 流和文件指针移动
- 如何将文件指针移回一个整数
- C++ 如何使用文件指针以增量方式写入文件
- 为什么std::istream::read不根据读取的字节移动文件指针