C ++ чтение / запись текстового файла в одной задаче -> обмен символов - PullRequest
0 голосов
/ 31 марта 2011

Я пытаюсь открыть TXT-файл для чтения / записи в одной задаче.Моя предыдущая цель - обменять некоторые символы сохраненными в массиве:

   void Inputfile::decryptFile(string filename)
{
    for(int i=0;i<15;i++)
    {
        fstream filedest(filename.c_str(), ios::in | ios::out);
        if(!filedest)
            cerr << "Konnte Zieldatei nicht oeffnen!\n";
        else 
            cout << endl << filename << " geoeffnet zum entschluesseln!\n";

        while(!filedest.eof())
        {
            filedest.get(ch);
            if(ch == char(this->mostcharsencrypted[i]))
            {
                filedest.put(char(this->mostchars[i]));
            }

        }
        filedest.close();
        cout << "Fertig!";
    }
}

mostcharsencrypted [] и mostchars [] являются целочисленными массивами, которые содержат символы.Я уверен, что есть только 8-битное значение Ansii, и я проверяю, что даже до того, как этот метод будет вызван.

Так что, если текущий читаемый символ - это тот, который находится в текущей позиции массива (i: 0 - 14) затем я хочу обменяться символом в txt-файле с символом из mostchars [].

В настоящее время я вижу, что получаю именно тот тип совпадений, но мой текстовый файл все еще показывает то же содержимое.

1 Ответ

0 голосов
/ 31 марта 2011

При замене файла обычно два отдельных потока используются для ввода и вывода по отдельности.Если вам нужно использовать один поток для ввода и вывода, цикл while будет выглядеть следующим образом:

while(filedest)
{
    streampos p = filedest.tellg();
    if(!filedest.get(ch)) break;
    filedest.seekp(p);
    char ch2 = (ch == char(this->mostcharsencrypted[i])) ?
        char(this->mostchars[i]) : ch;
    filedest.put(ch2);
    filedest.sync();
}
...