У меня возникают проблемы с тем, что fstream не записывается в файл, когда он находится в определенном месте. В следующем коде, когда прокомментированная строка раскомментирована, файл записывается, однако, когда он комментируется, файл вообще не записывается. Я добавил кучу консольного выхода, и он говорит, что оба выхода вокруг «outputFile < < newWord < < endl;" завершены, но файл никогда не записывается.fstream не записывается в файл
void write_index(string newWord)
{
fstream outputFile("H:\\newword.txt", ios::app);
int same = 0;
string currWord;
currWord.resize(5);
//outputFile << newWord << endl;
while(!outputFile.eof())
{
getline(outputFile, currWord);
cout << "Checking if " << newWord << "is the same as " << currWord << endl;
if(newWord == currWord)
{
cout << "It is the same" << endl;
same = 1;
break;
}
}
if(same != 1)
{
cout << "Writing " << newWord << "to file" << endl;
outputFile << newWord << endl;
cout << "Done writing" << endl;
}
outputFile.close();
}
«** ios :: app: ** Все выходные операции выполняются в конце файла, добавляя содержимое к текущему содержимому файла - этот флаг может использоваться только в потоках, открытых для операций с выходом ». Итак, как именно 'getline' будет работать в файле только для вывода? – paxdiablo
Я не знал об этом, но это имеет смысл, есть ли альтернатива для чтения из файла перед добавлением к нему? Я пытаюсь проверить все строки над строкой, которая должна быть записана, чтобы проверить, есть ли равные строки, а если есть, строка не написана. – user1560249
Откройте его для чтения/записи, затем сканируйте его, ища дубликат. Если не найден, просто установите указатель на файл в конец файла и напишите его. К сожалению, будучи больше C-пар, я знаю о 'fopen (?," A + ")' и 'fseek', но не эквивалентах C++ с верхней части головы. – paxdiablo