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 :)
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.
Näinhän se toimii! Tänks :)
Miksi muuten hakemistojen luonti system() funktion kautta?
Eikös stat() ja mkdir() funktioita voisi käyttää suoraan?
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?
Aihe on jo aika vanha, joten et voi enää vastata siihen.