Tiedostojen lukeminen ifstreamilla
Lue tekstiä ja tietoja
Tiedostojen lukeminen ifstreamilla on ilmainen C++ Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu C++ Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C++ Academy-kurssilla on yhteensä 4 oppituntia.
Mikä on ifstream?
std::ifstream (input file stream) lukee tietoja tiedostoista. Se toimii kuten std::cin, mutta sen lähde on levyllä oleva tiedosto.
- Määritellään otsikkotiedostossa
<fstream>. - Avaa tiedoston nimen perusteella konstruktorissaan.
#include <iostream>
#include <fstream>
int main() {
std::ofstream("demo.txt") << "hello\n";
std::ifstream in("demo.txt");
std::string word;
in >> word;
std::cout << word << '\n';
return 0;
}Tiedoston avaaminen
Luokaa ifstream-virta tiedostonimen avulla ja tarkistakaa sitten is_open()-funktiolla, löytyikö tiedosto.
#include <iostream>
#include <fstream>
int main() {
std::ofstream("data.txt") << "42\n";
std::ifstream in("data.txt");
std::cout << (in.is_open() ? "opened" : "failed") << '\n';
return 0;
}Sanojen lukeminen
>>-operaattori lukee tyhjemerkein eroteltuja tunnisteita samoin kuin cin-virran kanssa.
#include <iostream>
#include <fstream>
int main() {
std::ofstream("words.txt") << "alpha beta gamma\n";
std::ifstream in("words.txt");
std::string w;
while (in >> w) std::cout << w << '\n';
return 0;
}Lukujen lukeminen
Voitte lukea numeeriset tyypit suoraan. Virrasta lukeminen jäsentää tekstin oikean tyyppiseksi arvoksi.
#include <iostream>
#include <fstream>
int main() {
std::ofstream("nums.txt") << "10 20 30\n";
std::ifstream in("nums.txt");
int sum = 0, x;
while (in >> x) sum += x;
std::cout << "sum = " << sum << '\n';
return 0;
}Rivien lukeminen getlinella
Käyttäkää std::getline()-funktiota koko rivin lukemiseen välilyönnit mukaan lukien, rivinvaihtoon asti.
#include <iostream>
#include <fstream>
#include <string>
int main() {
std::ofstream("lines.txt") << "first line\nsecond line\n";
std::ifstream in("lines.txt");
std::string line;
while (std::getline(in, line)) std::cout << "[" << line << "]\n";
return 0;
}Koko tiedoston lukeminen
Jos haluatte lukea koko tiedoston kerralla, lukekaa se merkkijonoon virran puskuri-iteraattoreiden avulla.
#include <iostream>
#include <fstream>
#include <sstream>
int main() {
std::ofstream("all.txt") << "line1\nline2\n";
std::ifstream in("all.txt");
std::stringstream ss;
ss << in.rdbuf();
std::cout << ss.str();
return 0;
}Tiedoston lopun tunnistaminen
Lukusilmukka päättyy, kun lukeminen epäonnistuu, yleensä tiedoston lopussa. Virran testaaminen ehtolauseessa tarkistaa tämän.
#include <iostream>
#include <fstream>
int main() {
std::ofstream("eof.txt") << "1 2 3\n";
std::ifstream in("eof.txt");
int x, count = 0;
while (in >> x) ++count;
std::cout << "read " << count << " numbers\n";
std::cout << "eof: " << std::boolalpha << in.eof() << '\n';
return 0;
}Puuttuvan tiedoston käsittely
Jos tiedostoa ei ole olemassa, virta on virhetilassa ja is_open() palauttaa arvon false. Tarkistakaa aina virran tila ennen lukemista.
#include <iostream>
#include <fstream>
int main() {
std::ifstream in("does_not_exist_12345.txt");
if (!in) {
std::cout << "could not open file\n";
}
return 0;
}Rakenteisten rivien jäsentäminen
Yhdistäkää getline ja istringstream kenttien jäsentämiseksi jokaiselta riviltä.
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
int main() {
std::ofstream("people.txt") << "Alice 30\nBob 25\n";
std::ifstream in("people.txt");
std::string line;
while (std::getline(in, line)) {
std::istringstream ss(line);
std::string name; int age;
ss >> name >> age;
std::cout << name << " is " << age << '\n';
}
return 0;
}Avaaminen ja sulkeminen erikseen
Voitte avata oletuskonstruktorilla luodun virran myöhemmin open()-funktiolla ja vapauttaa sen close()-funktiolla.
#include <iostream>
#include <fstream>
int main() {
std::ofstream("oc.txt") << "data\n";
std::ifstream in;
in.open("oc.txt");
std::string s; in >> s;
in.close();
std::cout << s << '\n';
return 0;
}RAII hoitaa sulkemisen
Kun ifstream poistuu näkyvyysalueeltaan, sen destruktori sulkee tiedoston automaattisesti. Manuaalista close()-kutsua tarvitaan harvoin.
#include <iostream>
#include <fstream>
int main() {
std::ofstream("raii.txt") << "x\n";
{
std::ifstream in("raii.txt");
std::string s; in >> s;
std::cout << s << '\n';
} // file closed here automatically
std::cout << "closed\n";
return 0;
}Pikatarkistus
Testatkaa, miten hyvin ymmärrätte rivien lukemisen.
Kertaus
Olette oppineet, että std::ifstream:
- lukee tiedostoista käyttämällä
>>-operaattoria jastd::getline-funktiota - on tarkistettava
is_open()-funktiolla tai testaamalla virran tila - sulkeutuu automaattisesti RAII:n avulla poistuessaan näkyvyysalueeltaan
Seuraavaksi kirjoitatte tiedostoja ofstream-virralla.
Opi C++ tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 51
- Oppitunnit
- 203
Usein kysytyt kysymykset
Onko oppitunti ”Tiedostojen lukeminen ifstreamilla” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa C++ Academy-oppimispolun 3 oppituntia, myös oppitunnin “Tiedostojen lukeminen ifstreamilla”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. C++ Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Tiedostojen lukeminen ifstreamilla”?
Lue tekstiä ja tietoja Harjoittelet C++ Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni C++ Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin C++ Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”Tiedostojen lukeminen ifstreamilla”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä C++ Academy-oppitunnilla?
Kyllä. Jokainen C++ Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Tiedostojen lukeminen ifstreamilla
- Tiedostojen kirjoittaminen ofstreamilla
- Binaaritiedostojen I/O
- Virheenkäsittely ja tila