Чтение и запись в файлы одновременно?
Перенес вопрос сюда. Предположим, я хочу хранить 1 000 000 000 целых чисел и не могу использовать свою память. Я хотел бы использовать файл (который может легко обрабатывать столько данных). Как я могу позволить ему читать и писать и одновременно. С помощью fstream file("file.txt', ios::out | ios::in );
не создает файл, во-первых. Но предположим, что файл существует, я не могу использовать для чтения и записи одновременно. Что я имею в виду, так это: пусть содержимое файла будет 111111
Тогда, если я бегу: -
#include <fstream>
#include <iostream>
using namespace std;
int main()
{
fstream file("file.txt",ios:in|ios::out);
char x;
while( file>>x)
{
file<<'0';
}
return 0;
}
Должно ли содержимое файла теперь быть 101010
? Прочитать один символ, а затем переписать следующий с 0? Или, если все содержимое было сразу прочитано в некоторый буфер, не должно ли быть по крайней мере один 0 в файле? 1111110
? Но содержимое остается неизменным. Пожалуйста, объясни. Спасибо.
2 ответа
Файловые потоки поддерживают два указателя, один для чтения и один для записи. Если вы выполняете операции чтения / записи, вам нужно явно установить эти указатели с помощью seeg
а также seekp
функции-члены. Вы также обнаружите, что выполнение форматированного ввода-вывода может помешать тому, что вы пытаетесь сделать, поэтому вы должны использовать get
/put
а также read
/write
функции-члены вместо.
См. Также Почему я не могу читать и добавлять с помощью std::fstream в Mac OS X? для больше на открытых режимах с fstreams.
Два возможных решения, которые были бы гораздо более эффективными: (i) использовать 64-битную ОС или (ii) использовать mmap
,