C++ Academy · Oppitunti

Tiedostojen lukeminen ifstreamilla

Lue tekstiä ja tietoja

Oppitunti 1/413 vaihetta

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 ja std::getline-funktiota
  • on tarkistettava is_open()-funktiolla tai testaamalla virran tila
  • sulkeutuu automaattisesti RAII:n avulla poistuessaan näkyvyysalueeltaan

Seuraavaksi kirjoitatte tiedostoja ofstream-virralla.

Aloita maksutta

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

  1. Tiedostojen lukeminen ifstreamilla
  2. Tiedostojen kirjoittaminen ofstreamilla
  3. Binaaritiedostojen I/O
  4. Virheenkäsittely ja tila
← Takaisin: C++ Academy