Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Onko tekstitiedosto loppu?

Sivun loppuun

zeropointx [14.10.2013 20:50:06]

#

Olen tehnyt koulun harjoitustyötä, mutta mikäli tekstitiedosto on tyhjä, ei pysty fscanf:llä ottamaan mitään talteen (yllätys yllätys) ja se johtaa ohjelman kaatumiseen. Joten onko mahdollista tarkistaa jotenkin onko tekstitiedosto tyhjä (ei tekstiä sisällä, mutta tiedosto olemassa? Kieli on ilmeisesti c++.

Metabolix [14.10.2013 21:02:28]

#

Olennaisinta on tarkistaa fscanf-funktion paluuarvo, joka kertoo, montako %-kohtaa saatiin luettua. Kun lukeminen on epäonnistunut, feof-funktiolla voi tarkistaa, loppuiko tiedosto. Muu syy fscanf:n epäonnistumiselle on esimerkiksi väärä formaatti: yritetään lukea vaikka kokonaislukua (%d) mutta tiedostossa onkin jotain muuta.

FILE* f;
f = fopen("tiedosto.txt", "r");
if (!f) {
	printf("Tiedostoa ei voida avata, eli sitä ei ehkä ole.\n");
	exit(1);
}
int a, b;
if (fscanf(f, "%d %d", &a, &b) != 2) {
	printf("Jostain syystä ei saatu luettua kahta lukua.\n");
	if (feof(f)) {
		printf("Tiedostokin loppui.\n");
	}
	exit(2);
}

zeropointx kirjoitti:

Kieli on ilmeisesti c++.

Etkö ole edes varma, mitä kieltä käytät, vai tarkoititko, että jollain tavalla olisi viestistäsi ilmeistä, että kieli on C++? Minusta ainakin olisi ilmeisempää, että kieli on C, kun kerran käytät C:n standardikirjastoa.

Rox [14.10.2013 21:13:50]

#

Ilmeisesti C++? Mitäköhän tehtävää teet josset tiedä mitä kieltä siinä käytetään..

bool tarkista(const char *tiedosto)
{
  ifstream x(tiedosto);
  return x;
}

Metabolix [14.10.2013 21:17:13]

#

No tuo Roxin ratkaisu nyt ei ainakaan ratkaise yhtään mitään. Siinähän selviää vain, saako tiedoston avattua. Siitä ei varmaan ollut epäselvyyttä.

Rox [15.10.2013 15:47:40]

#

Metabolix kirjoitti:

No tuo Roxin ratkaisu nyt ei ainakaan ratkaise yhtään mitään. Siinähän selviää vain, saako tiedoston avattua. Siitä ei varmaan ollut epäselvyyttä.

= Jos saa avattua = tiedosto on olemassa, jos taas ei = tiedosto ei ole olemassa?

Eikö ... ?

jalski [15.10.2013 16:12:49]

#

Rox kirjoitti:

= Jos saa avattua = tiedosto on olemassa, jos taas ei = tiedosto ei ole olemassa?

Eikö ... ?

Tiedosto voi tosin olla tyhjä, vaikka onkin olemassa...

samip [15.10.2013 16:59:31]

#

Rox kirjoitti:

Jos saa avattua = tiedosto on olemassa, jos taas ei = tiedosto ei ole olemassa?

Tai käyttäjällä ei ole oikeutta avata tiedostoa vaikka se onkin olemassa.

Rox [15.10.2013 19:09:31]

#

So siinä tapauksessa boost varmaan on ihan toimiva ratkaisu.

#include <boost/filesystem.hpp>

bool FileExist( const std::string& Name )
{
     return boost::filesystem::exists(Name);
}//@stack overflow

Metabolix [15.10.2013 19:28:59]

#

Rox, mitä jos nyt lukisit, mitä edes kysyttiin? Otsikossa kysyttiin tiedoston loppumisesta ja viestissä tiedoston tyhjyydestä. Kukaan ei ole kysynyt, onko se olemassa.

Rox [15.10.2013 23:31:46]

#

Mjooh.., saattaa olla että takerruin tähän:

zeropointx kirjoitti:

...ei tekstiä sisällä, mutta tiedosto olemassa?

    std::ifstream tiedosto("tiedosto.txt");
	if(tiedosto.peek() == std::ifstream::traits_type::eof())
	MessageBox(NULL, "Tiedosto on tyhjä!", "...", MB_OK);

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta