Файлдар жана агымдар: тереңирээк
fstream, форматтоо, экилик жана тексттик режим, каталар абалы
Негизги идея: C++ тилинде киргизүү жана чыгаруунун ар кандай булагы — клавиатура, экран, дисктеги файл, атүгүл эстутумдагы сап да — бир эле абстракция менен сүрөттөлөт: агым менен. Агымдарды түшүнгөндөн кийин файлды окуу
std::cin окугандан дээрлик айырмаланбайт. Бул тема сизди баштапкы "ач, оку, жап" рецептинен алдыга алып чыгып, чыныгы программаларда маанилүү болгон майда-чүйдөлөрдү ачат: ачуу режимдери, чыгарууну форматтоо, тексттик жана экилик киргизүү-чыгаруунун айырмасы жана операция чын эле ийгиликтүү болгонун кантип текшерүү.
Теманын аягында сиз мыналарды жасай аласыз:
- тапшырмага туура агым түрүн жана ачуу режимин тандоо,
- файлдарды туура цикл идиомасы менен ишенимдүү окуу,
- чыгаруунун көрүнүшүн манипуляторлор менен башкаруу (
setw,setprecision,fixed,hex, ...), - экилик маалыматты окуу жана жазуу жана тексттик режим качан сизди алдап коёрун билүү,
- каталар абалын (
good,eof,fail,bad) текшерүү жана каатадан кийин калыбына келүү.
1. Агымдар үй-бүлөсү
Агым — бул сиздин программаңыз менен кайсы бир түзмөктүн ортосундагы байттардын агып жаткан ырааттуулугун көрсөткөн объект. Стандарттык китепкана <iostream>, <fstream> жана <sstream> баш файлдарында жарыяланган кичине иерархияны берет:
std::istream— андан окуй турган негизги түр (std::cin— ошолордун бири).std::ostream— ага жаза турган негизги түр (std::cout,std::cerr).std::ifstream— киргизүү файл агымы.std::ofstream— чыгаруу файл агымы.std::fstream— экөөнү тең жасай алган файл агымы.std::istringstream/std::ostringstream— эстутумдагы саптын үстүндөгү агымдар, текстти талдоо жана куруу үчүн эң ыңгайлуу.
Пайдасы бирдейликте: std::istream& кабыл алган каалаган функция std::cin, std::ifstream же std::istringstream дегендердин баарын кубануу менен кабыл алат. Талдоо кодун бир жолу жазыңыз — ал файлдар, консоль жана тест саптары менен иштейт.
fstream эки жактан тең мурас алат, ошондуктан окуй да, жаза да алат. Негизги түрлөргө жазылган каалаган код ар бир конкреттүү агым менен иштейт.