在c ++中重写文件内容的有效方法

时间:2012-02-28 17:44:24

标签: c++

我有基本代码,如下所示:

while(inputfileStream.good())
{
    for(int i = 0;i<levels;i++)
    {
        inputfileStream.open(_file,ios::in | ios::out | ios::binary);
        for(int i = 0,kPOS=0;i<=fsize;i++,kPOS++)
        {
            if(kPOS > Ksize)
                kPOS=0;
            char tempchar = 0;
            inputfileStream.seekg(i,ios::beg);
            inputfileStream.get(tempchar);
            tempchar+=(int)_encription_key[kPOS];
            inputfileStream.seekg(i,ios::beg);
            inputfileStream.put(tempchar);
        }
        inputfileStream.close();
    }
}

这是一个基本的加密器。我只有一个问题:对于每个加密级别,我必须重新打开文件以获取其内容。否则如果我不这样做,当我从每个级别解密文件时,我都有相同的旧文本。

除了致电open()close()之外,你能帮助我更好地重新阅读文件内容吗?

2 个答案:

答案 0 :(得分:0)

不是关闭和打开文件,而是

  1. flush()书面内容
  2. 将内容同步()到读缓冲区
  3. seekp()每次迭代时指向文件开头的put指针
  4. 如果在fstream上设置例外(),这可能会更清楚。由于fstream不处于good()状态,您很可能在某些点上看不到加密工作。

答案 1 :(得分:-1)

好吧,如果你写的是输出文件,而是覆盖输入......

inputfileStream.put(...)。你会谈到这种事情。

更不用说,看看你在做什么,你可以颠倒循环。

读取一个字节,执行每个加密级别,然后将其写出来......