Таблица 10.2. Режимы открытия файла
Комбинация флагов ios
|
Эквивалент
stdio
|
binary
|
in
|
out
|
trunc
|
app
|
|
|
+
|
|
|
"w"
|
|
+
|
|
+
|
"a"
|
|
+
|
+
|
|
"w"
|
+
|
|
|
|
"r"
|
+
|
+
|
|
|
"r+"
|
+
|
+
|
+
|
|
"w+"
|
+
|
|
+
|
|
|
"wb"
|
+
|
|
+
|
|
+
|
"ab"
|
+
|
|
+
|
+
|
|
"wb"
|
+
|
+
|
|
|
|
"rb"
|
+
|
+
|
+
|
|
|
"r+b"
|
+
|
+
|
+
|
+
|
|
"w+b"
|
Îòêðûòü ôaéë â ïðîãðaììå ìîæíî ñ èñïîëüçîâaíèåì ëèáî êîíñòðóêòîðîâ, ëèáî ìåòîäa Open, èìåþùåãî òaêèå æå ïaðaìåòðû, êaê è â ñîîòâåòñòâóþùåì êîíñòðóê- òîðå, íaïðèìåð:
ifstream inpf ("input.txt"); // Èñïîëüçîâaíèå êîíñòðóêòîða if (!inpf){
COut << "Íåâîçìîzíî îòêðûòü ôaéë äëя ÷òåíèя"; return 1;
}
Ostream f;
f.Open("Output.txt", iOs::Out); // Èñïîëüçîâaíèå ìåòîäa Open if (!f){
COut << "Íåâîçìîzíî îòêðûòü ôaéë äëя çaïèñè"; return 1;
}
×òåíèå è çaïèñü âûïîëíяþòñя ëèáî ñ ïîìîùüþ îïåðaöèé ÷òåíèя è èçâëå÷åíèя, aíaëîãè÷íûõ ïîòîêîâûì êëaññaì, ëèáî ñ ïîìîùüþ ìåòîäîâ êëaññîâ.
Ïðèìåð èñïîëüçîâaíèя ìåòîäîâ (ïðîãðaììa âûâîäèò ía ýêðaí ñîäåðæèìîå ôaéëa):
inClude int main(){
Char text[81], buf[81];
COut << "Ââåäèòå èìя ôaéëa:"; Cin >> text;
ifstream f(text); if (!f){
COut << "Îøèáêa îòêðûòèя ôaéëa"; return 1;
}
while (!f.eOf()){ f.getline(buf, 81); COut << buf << endl;
}
return 0;
}
Äëя çaêðûòèя ïîòîêa îïðåäåëåí ìåòîä ClOse(), íî ïîñêîëüêó îí íåяâíî âûïîëíяåò- ñя äåñòðóêòîðîì, яâíûé âûçîâ íåîáõîäèì òîëüêî òîãäa, êîãäa òðåáóåòñя çaêðûòü ïîòîê ðaíüøå êîíöa åãî îáëañòè âèäèìîñòè.
Строковые потоки
Còðîêîâûå ïîòîêè ïîçâîëяþò ñ÷èòûâaòü è çaïèñûâaòü èíôîðìaöèþ èç îáëañòåé îïåðaòèâíîé ïaìяòè òaê æå, êaê èç ôaéëa, ñ êîíñîëè èëè ía äèñïëåé.  ñòaíäaðò- íîé áèáëèîòåêå îïðåäåëåíî òðè êëañña ñòðîêîâûõ ïîòîêîâ1:
istringstream — âõîäíûå ñòðîêîâûå ïîòîêè; Ostringstream — âûõîäíûå ñòðîêîâûå ïîòîêè; stringstream — äâóíaïðaâëåííûå ñòðîêîâûå ïîòîêè.
Ýòè êëaññû îïðåäåëяþòñя â çaãîëîâî÷íîì ôaéëå 2 è яâëяþòñя ïðîèç- âîäíûìè îò êëaññîâ istream, Ostream è iOstream ñîîòâåòñòâåííî, ïîýòîìó îíè ía-
1 Â ñòaðûõ âåðñèяõ êîìïèëяòîðîâ ýòè êëaññû ìîãóò èìåòü äðóãèå íaçâaíèя.
2  ñòaðûõ âåðñèяõ êîìïèëяòîðîâ çaãîëîâî÷íûé ôaéë ìîæåò èìåòü èìя .
ñëåäóþò ïåðåãðóæåííûå îïåðaöèè << è >>, ôëaãè ôîðìaòèðîâaíèя, ìaíèïóëяòî- ðû, ìåòîäû, ñîñòîяíèå ïîòîêîâ è ò. ä.
Ó÷añòêè ïaìяòè, ñ êîòîðûìè âûïîëíяþòñя îïåðaöèè ÷òåíèя è èçâëå÷åíèя, ïî ñòaíäaðòó îïðåäåëяþòñя êaê ñòðîêè C++ (êëaññ string). Còðîêîâûé êëaññ ðañ- ñìaòðèâaåòñя ía ñ. 286. Còðîêîâûå ïîòîêè ñîçäaþòñя è ñâяçûâaþòñя ñ ýòèìè ó÷a- ñòêaìè ïaìяòè ñ ïîìîùüþ êîíñòðóêòîðîâ:
expliCit1 istringstream(int mOde = iOs::in);
expliCit istringstream(COnst string& name, int mOde = iOs::in); expliCit Ostringstream(int mOde = iOs::Out);
expliCit Ostringstream(COnst string& name, int mOde = iOs::Out); expliCit stringstream(int mOde = iOs::in | iOs::Out);
expliCit stringstream(COnst string& name, int mOde = iOs::in | iOs::Out);
Còðîêîâûå ïîòîêè яâëяþòñя íåêîòîðûì aíaëîãîì ôóíêöèé ssCanf è sprintf áèá- ëèîòåêè C è ìîãóò ïðèìåíяòüñя äëя ïðåîáðaçîâaíèя äaííûõ, êîãäa îíè çaíîñяò- ñя â íåêîòîðûé ó÷añòîê ïaìяòè, a çaòåì ñ÷èòûâaþòñя â âåëè÷èíû òðåáóåìûõ òè- ïîâ. Ýòè ïîòîêè ìîãóò ïðèìåíяòüñя òaêæå äëя îáìåía èíôîðìaöèåé ìåæäó ìîäóëяìè ïðîãðaììû.
 ñòðîêîâûõ ïîòîêaõ îïèñaí ìåòîä str, âîçâðaùaþùèé êîïèþ ñòðîêè èëè óñòa- íaâëèâaþùèé åå çía÷åíèå:
string str() COnst;
vOid str(COnst string & s);
Ïðîâåðяòü ñòðîêîâûé ïîòîê ía ïåðåïîëíåíèå íå òðåáóåòñя, ïîñêîëüêó ðaçìåð ñòðîêè èçìåíяåòñя äèíaìè÷åñêè.
 ïðèâåäåííîì íèæå ïðèìåðå ñòðîêîâûé ïîòîê èñïîëüçóåòñя äëя ôîðìèðîâaíèя ñîîáùåíèя, âêëþ÷aþùåãî òåêóùåå âðåìя è ïåðåäaâaåìûé â êa÷åñòâå ïaðaìåòða íîìåð:
inClude inClude inClude inClude using namespaCe std;
string message( int i){ Ostringstream Os; time_t t;
time(&t);
Os << " time: " << Ctime(&t) << " number: " << i << endl; return Os.str();
}
int main(){
COut << message(22); return 0;
}
1 cì. ñ. 197.
Do'stlaringiz bilan baham: |