Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako proslediti ime fajla kao argument u kom. liniji?

[es] :: C/C++ programiranje :: Kako proslediti ime fajla kao argument u kom. liniji?

[ Pregleda: 3281 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Pretender

Član broj: 12407
Poruke: 100
*.ppp-bg.sezampro.yu



Profil

icon Kako proslediti ime fajla kao argument u kom. liniji?23.04.2004. u 22:11 - pre 242 meseci
Ko o cemu, ja o command lajnu.
Code:
//: S07:Text.cpp
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

class Text {
    string text;
public:
    Text() {}
    Text(const string& fname) {
        ifstream ifs(fname.c_str());
        string line;
        while (getline(ifs, line))
            text += line + '\n';
    }
    string contents() {
        return text;
    }
};

int main(int argc, char* argv[]) {
    if (argc > 1)
    {
        Text t1;
        Text t2(argv[1]);
        cout << "t1 :\n" << t1.contents() << endl;
        cout << "t2 :\n" << t2.contents() << endl;
    }
}
///:~

Kako god da prosledim ime neke datoteke kao argv[1] u kom.liniji, na izlazu dobijem samo
t1:
t2:
iako bi posle t2 trebalo da sledi sadrzaj doticne datoteke.

Posto je argument pointer, trbalo bi u kom.liniji da prosledim adresu fajla, ali kako ?
Kompajler je Dev-Cpp.

TX
 
Odgovor na temu

Časlav Ilić
Braunšvajg, Nemačka

Član broj: 4945
Poruke: 565
*.informatik.uni-erlangen.de



+27 Profil

icon Re: Kako proslediti ime fajla kao argument u kom. liniji?24.04.2004. u 05:59 - pre 242 meseci
Taj program radi baš kako treba, možda si u komandnoj liniji zadao nepostojeću datoteku... U principu je dobro da kad god otvaraš datoteku proveriš da li je zaista i otvorena, tj. mogao bi funkciju Text(const string& fname) da napišeš kao:

Code:
Text(const string& fname) {
        ifstream ifs(fname.c_str());
        if (ifs) {
            string line;
            while (getline(ifs, line))
                text += line + '\n';
        }
        else
            cout << "Text::Text: Cannot open file " << fname << endl;
    }

 
Odgovor na temu

Pretender

Član broj: 12407
Poruke: 100
194.106.191.*



Profil

icon Re: Kako proslediti ime fajla kao argument u kom. liniji?24.04.2004. u 13:06 - pre 242 meseci
Ne sumnjam da program radi dobro, samo ne znam kako da ispravno prosledim ime fajla.
Prosirio sam konstruktor Text, kako si predlozio, i on redovno izbacuje poruku: Cannot open file ...
Ako npr. u direktorijumu PROJEKTI (u koji Dev smesta sve fajlove), imam ImeFajla.cpp , ja u kom. liniju stavim >Text (ImeFajla) ili >Text (ImeFajla.cpp) ili >Text ("ImeFajla.cpp") u cemu ocigledno gresim, jer program ne moze da otvori trazeni fajl.
Ne koristim nepostojece fajlove; ni >Text (Text.cpp) /itd/ ne daje rezultat.

TX
 
Odgovor na temu

Časlav Ilić
Braunšvajg, Nemačka

Član broj: 4945
Poruke: 565
*.informatik.uni-erlangen.de



+27 Profil

icon Re: Kako proslediti ime fajla kao argument u kom. liniji?24.04.2004. u 14:39 - pre 242 meseci
U tom slučaju, ubij me ako znam u čemu je problem :) Evo baš sam isprobao program, kada ga normalno pokrenem, ./testprog testprog.cc, normalno i dobijem listing datoteke testprog.cc u konzoli.
 
Odgovor na temu

Pretender

Član broj: 12407
Poruke: 100
*.ppp-bg.sezampro.yu



Profil

icon Re: Kako proslediti ime fajla kao argument u kom. liniji?24.04.2004. u 17:42 - pre 242 meseci
Ipak si mi pomogao!
Tvoj post (primer) me je podsetio da argumente u komandnoj liniji ne treba stavljati u zagrade ;))

Besten Dank
 
Odgovor na temu

milanche
San Francisco

Član broj: 2447
Poruke: 1200
*.client.comcast.net



+1001 Profil

icon Re: Kako proslediti ime fajla kao argument u kom. liniji?24.04.2004. u 19:44 - pre 242 meseci
Takodje je vrlo dobra praksa da svaki command-line argument stavljas u duple navodnike.

Razlog:
recimo da se fajl nalazi u C:\Documents and Settings\Pretender\Desktop.
Kad ne bi bilo navodnika, moglo bi se greskom shvatiti da ima tri argumenta
(prvi bi bio 'C:\Documents', drugi 'and' i treci 'Settings\Pretender\Desktop').

Svi komercijalni programi su pravljeni da korektno izdvajaju sve izmedju duplih
navodnika, a da same duple navodnike uklanjaju. Za svoj program moras da se
sam potrudis da ga napravis da sledi trend, sto nije mnogo tesko.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Kako proslediti ime fajla kao argument u kom. liniji?

[ Pregleda: 3281 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.