标准C++文件读写操作如何同时进行?
我写了个函数,用于打开一个文件,逐行读出字符串,翻转并写回。代码如下:
void foo(char *filename){
fstream f;
f.open(filename, ios::in | ios::out);
char tmp[MAX_STR_LEN];
while(f.getline(tmp, MAX_STR_LEN, '\n ') ){
int len = strlen(tmp);
revere(tmp, len); // 其他函数实现
f < < tmp < < endl;
f.flush();
}
f.close();
return;
}
问题是我无法在读出文件内容后重新写回。
我曾尝试使用seekg(操作读文件指针)和seekp(操作写文件指针),但却不熟悉它们的用法而失败;更重要的是,我没有找到读取这两个指针 当前 位置的函数。
请问用何种方法可以实现函数的功能?要求是不能使用其他文件或额外的内存来保存文件的所有内容(由于要操作的文件本身可能很大)。
PS:C语言里的fseek我也尝试过,依旧搞的我焦头烂额。。。各位帮帮小弟吧 :(
[解决办法]
直接回写一行肯定不行
既然文件大,又不能用其他文件或者额外的内存
那在windows下就用内存映射文件
1 CreateFile获得目标文件的句柄
2 CreateFileMapping创建一个内存映射文件对象,并且获得句柄
3 MapViewOfFile将文件数据作为内存提交
[解决办法]
c/c++标准库无法实现lz的要求
[解决办法]
不如先写到一个新文件,完成以后把旧文件删除,再把新文件改名到旧文件
[解决办法]
看《标准C++输入输出流与本地化》