首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

标准C++文件读写操作怎么同时进行

2012-03-15 
标准C++文件读写操作如何同时进行?我写了个函数,用于打开一个文件,逐行读出字符串,翻转并写回。代码如下:vo

标准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++输入输出流与本地化》

热点排行