В языке C++ можно считывать записи из файла и записывать данные в файл. Обычно это используется, если программа запускается не один раз и каждый раз нужны данные с прошлого запуска. Рассмотрим следующую программу:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#include <iostream.h> #include <fstream.h> #include <math.h> void main() { double a,b; ifstream f; ofstream f1; char str[40]; cout<<"\n Enter the file name: \n"; cin>>str; f.open (str); f>>a; f.close(); cout<<"\n Recorded number A="<<a; b=a+a; cout<<"\n b="<<b; cout<<"\n Enter the file name: \n"; cin>>str; f1.open(str); f1<<b; f1.close(); cout<<endl; } |
Для начала идет подключение библиотек:
#include <fstream.h>, в которой находятся потоки для работы с информацией из файлов,
#include <iostream.h>, которая организует эти потоки,
Далее идут 4 строки объявления переменных: два числа, массив из 40 символов для пути к файлу и 2 потока: входящий (ifstream) и исходящий (ofstream). В двух следующих строках пользователь задает путь к файлу. Далее строка f.open открывает этот файл для чтения (ведь f объявлена как входящий поток (ifstream)), мы считываем из него переменную a и закрываем файл. Вычисляем переменную b и теперь открываем тот же файл для записи (уже переменной исходящего потока), записываем b и закрываем файл.
Простите — но с чем именно вы собрались синхронизировать файловый поток? Для синхронизации требуется два объекта. cin синхронизирован с stdin, cout — с stdout, а с чем будет синхронизирован созданный вами объект?
Можно его не синхронизировать. Он по умолчанию ассоциирован уже с чем-то. Так что можно специально ничего не делать.
Есть ещё способы работы с буферами (команды вроде f.rdbuf();), но они посложнее. Так что можно ничего специально не делать.
Ещё большей производительности можно достигнуть, если читать данные большими кусками и работать затем исключительно в памяти.