Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Onko kansio olemassa?

vesikuusi [21.02.2011 21:13:16]

#

Ongelma on yksinkertainen: Ohjelma tarkistaa, voiko kansiota avata, ja jos ei voi, niin luodaan kyseinen kansio ja sille alikansio. Koodi:

if(ifstream("~/.bookmarkker"))
           NULL;

else{
       system("mkdir ~/.bookmarkker");
       system("mkdir ~/.bookmarkker/bookmarks");
    }

Tämä siis main() funktion alussa. Kuitenkin, aina palatessa main() funktioon, ohjelma tulostaa:
mkdir: hakemiston ö/home/matias/.bookmarkkerö luominen ei onnistu: Tiedosto on olemassa
mkdir: hakemiston ö/home/matias/.bookmarkker/bookmarksö luominen ei onnistu: Tiedosto on olemassa

Käyttis on Ubuntu 10.04 ja kääntäjä g++ 4.4.3

Missä siis on ongelma? Kiitosta etukäteen :)

Metabolix [21.02.2011 21:24:51]

#

Hakemistoa ei voi avata ifstreamilla. Itse asiassa C++ itsessään ei taida sisältää tuohon tarkistukseen mitään keinoa, koska C++ kielenä ei vaadi käyttöjärjestelmältä sellaista asiaa kuin "hakemisto".

Voit käyttää usealla alustalla toimivaa boost-kirjastoa, josta löytyy funktio boost::filesystem::create_directory, tai voit luoda hakemiston ilman tarkistuksia yhdellä kertaa näin:

mkdir -p ~/.bookmarker/bookmarks

Lisätietoja tästä tavasta on luonnollisesti mkdir-ohjelman ohjeissa.

Sanassa bookmarker on oikein kirjoitettuna yhteensä vain kaksi k-kirjainta.

vesikuusi [21.02.2011 21:44:03]

#

Näinhän se toimii! Tänks :)

jalski [21.02.2011 22:04:56]

#

Miksi muuten hakemistojen luonti system() funktion kautta?

Eikös stat() ja mkdir() funktioita voisi käyttää suoraan?

eq [21.02.2011 23:08:33]

#

jalski kirjoitti:

Miksi muuten hakemistojen luonti system() funktion kautta?

Eikös stat() ja mkdir() funktioita voisi käyttää suoraan?

Toki, jos järjestelmä sellaiset tarjoaa. C:hen (tai C++:aan) ne eivät kuitenkaan sisälly; se, että system-kutsu toimii ei suoraan takaa, että järjestelmä tarjoaisi myös kyseiset funktiot. (Aloittajan tapauksessa näin toki on.)

vesikuusi kirjoitti:

Ongelma on yksinkertainen: Ohjelma tarkistaa, voiko kansiota avata, ja jos ei voi, niin luodaan kyseinen kansio ja sille alikansio. Koodi:

Miten kansio avataan? :)
Mitä silloin pitäisi tapahtua?

Vastaus

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

Tietoa sivustosta