[C++]Otwarcie pliku


(IcyMat) #1

Witam.

Uczę sie C++ od dzisiaj i stanąłem przed problemem otwierania pliku. Przeszukałem i forum i Google, ale nigdzie nie znalazłem rozwiązania mojego prostego problemu.

string file_get_contents(string nazwa, string wypis) {

    fstream baza;

    ifstream href = "bazy/"+nazwa+".txt";

    baza.open(href,std::ios::in|std::ios::out);//baza.open(href);

    if(baza.good()==true){

          std::cout<<"Uzyskano dostep do wybranej bazy!\n"<
          //operacje odczytu danych          

          string dane;

          while(!baza.eof()) {

                getline(baza,dane);

                wypis += dane+"\n";

          }

          baza.close();

    } else {

          std::cout<<"Dostep do pliku bazy zostal zabroniony!\n"<
    }

    return wypis;

}

Zbudowałem sobie taką oto funkcję, ale w miejscu "baza.open(href,std::ios::in|std::ios::out);" mam błąd. Jak zrobię "baza.open("adres.pliku",std::ios::in|std::ios::out);" to działa, ale ja chcę mieć ten adres pliku zmienny. We wszystkich przykładach w Internecie adresy sa statyczne dlatego nie mogłem odszukać rozwiązania mojego problemu :frowning:

Z góry dziękuję za pomoc i przepraszam jeśli ten temat został już poruszony.

Pozdrawiam

IcyMat


(Sawyer47) #2

http://www.cplusplus.com/reference/iost ... ream/open/ , funkcja przyjmuje nazwę pliku jako pierwszy parametr (typu const char*), a ty przesyłasz obiekt ifstream. Po co Ci w ogóle obiekt href?


(IcyMat) #3

Przepraszam, ale w kodzie, który wysłałem jest błąd :stuck_out_tongue_winking_eye:

string file_get_contents(string nazwa, string wypis) {

    fstream baza;

    string href = "bazy/"+nazwa+".txt";

    baza.open(href,std::ios::in|std::ios::out);//baza.open(href);

    if(baza.good()==true){

          std::cout<<"Uzyskano dostep do wybranej bazy!\n"<
          //operacje odczytu danych          

          string dane;

          while(!baza.eof()) {

                getline(baza,dane);

                wypis += dane+"\n";

          }

          baza.close();

    } else {

          std::cout<<"Dostep do pliku bazy zostal zabroniony!\n"<
    }

    return wypis;

}

Chcę otworzyć plik, do którego link jest podany w zmiennej... "ifstream href = "bazy/"+nazwa+".txt";" pisząc w ten sposób chciałem tylko coś sprawdzić i zapomniałem tego zmienić... Co mam zrobić, żeby funkcja "open" przyjęła za nazwę pliku wartość zmiennej href - jakiego typu ma być ta zmienna??


(Quentin) #4

Musi być typu const char*, a string na taki typ możesz zamienić za pomocą tej funkcji składowej:

:arrow: http://www.cplusplus.com/reference/string/string/c_str/


(IcyMat) #5

Dziękuję za pomoc - jako początkujący nie wpadłem na to, aby zmienić w pierwszej linijce kodu "string nazwa" na "const char* nazwa" :stuck_out_tongue_winking_eye:

Dziękuję za pomocne linki :wink: