Nazwa pliku uzależniona od std::cin >> login

Odpowiedz Nowy wątek
2014-06-08 17:55
0

Mam następujący kod:
jak zrobić, by nazwa pliku była taka sama jak podany w std::cin >> login; login.
W komentarzach kodu zawarłem coś takiego:

//std::ostringstream mojStrumien;
//mojStrumien << "Files/" << login << ".ini";

Podobno ma działać lecz nie działa. Z tym fragmentem nie tworzy się w ogóle żaden plik. Obecny kod działa poprawnie z tą różnicą, że tworzy plik o konkretnej nazwie podanej w kodzie i zapisuje je do pliku. Jak coś takiego zrobić?

void rejestracja(){

    std::string login, haslo, tmp;

    //char login[24];
    std::cout << "Login: ";
    std::cin >> login;

    //char haslo[24];
    std::cout << "Haslo: ";
    std::cin >> haslo;

    tmp = haslo;
    std::ifstream plik;
    plik.open( login.c_str(), std::ios::in );
    if (login.c_str())

    {

        //std::ostringstream mojStrumien;
        //mojStrumien << "Files/" << login << ".ini";

        std::string const nazwaPliku( "Files/konto.ini" );
        std::ofstream mojStrumien( nazwaPliku.c_str() );
        mojStrumien << "login = " << login << std::endl;
        mojStrumien << "haslo = " << haslo << std::endl;
        std::cout << "Rejestracja przebiegla prawidlowo." << std::endl;
        mojStrumien.close();
    }
    else
    {
        std::cout << "Taki uzytkownik juz istnieje!" << std::endl;

    }

}
edytowany 2x, ostatnio: dawid4157, 2014-06-08 17:57
warunek w ifie zawsze będzie prawdziwy ,c_str() zwraca wskaźnik na stringa w stylu c . - Proxima 2014-06-08 17:59
a co to ma do rzeczy? nie to jest problemem. - dawid4157 2014-06-08 18:04

Pozostało 580 znaków

2014-06-08 18:03
0

Sprawdź co napisałem w komentarzu, a pozatym klasa ostringstream nie służy do zapisu/odczytu tylko do łatwej konwersji np. Int -> string;
Zainteresuj się klasą bodajże ostream
Przyczyną może być też że chcesz do nazwy pliku wstawić slasha, nie podawaj katalogu w którym ma to zapisać, tylko nazwe, program zapisze w folderze gdzie sam sie znajduje.
Jak chcesz do folderu files pisać, to może przed pisaniem do pliku wywołaj system("cd Files");


#include <iostream>
#include <fstream>
#include <string>
int main()
{
    std::string nazwa = "xxx.ini";
    std::ofstream z(nazwa.c_str());
    z << "coś";
    z.close();
}

Tak powinno działać.

edytowany 8x, ostatnio: Proxima, 2014-06-08 18:20

Pozostało 580 znaków

2014-06-08 18:21
0

Ale nie zrozumiałeś o co mi chodzi.
Tak wygląda konsola po podaniu danych i wciśnięciu ENTER:
http://iv.pl/images/23399567116966955139.png

Tak wygląda utworzony plik i jego nazwa w folderze "Files":
http://iv.pl/images/91731902134162784649.png

Chodzi o to, żeby plik nie nazywał się konto.ini tylko w tym przypadku dawid.ini. Gdy w login podam "abcde" to plik ma się nazywać abcde.ini

Pozostało 580 znaków

2014-06-08 18:28
0
 #include <iostream>
#include <fstream>
#include <string>
int main()
{

    std::string login, haslo, tmp;

    //char login[24];
    std::cout << "Login: ";
    std::cin >> login;

    //char haslo[24];
    std::cout << "Haslo: ";
    std::cin >> haslo;

    tmp = haslo;
    std::ifstream plik;
    plik.open( login.c_str(), std::ios::in );
    if (login.c_str())

    {
        std::string loginn = login+".ini";
        std::ofstream mojStrumien( loginn.c_str() );
        mojStrumien << "login = " << login << std::endl;
        mojStrumien << "haslo = " << haslo << std::endl;
        std::cout << "Rejestracja przebiegla prawidlowo." << std::endl;
        mojStrumien.close();
    }
    else
    {
        std::cout << "Taki uzytkownik juz istnieje!" << std::endl;

    }

}

Prosze Cię bardzo, ifa popraw sam :D

edytowany 1x, ostatnio: Proxima, 2014-06-08 18:28

Pozostało 580 znaków

2014-06-08 18:40
0

A jak zrobić, że gdy wyłączę konsolę i włączę żeby dodawał się nowy plik a nie zamieniał za już istniejący? I o co Ci chodzi z tym ifem?
Ogólnie kod mam taki:

void rejestracja(){

    std::string login, haslo, tmp;

    //char login[24];
    std::cout << "Login: ";
    std::cin >> login;

    //char haslo[24];
    std::cout << "Haslo: ";
    std::cin >> haslo;

    tmp = haslo;
    std::ifstream plik;
    plik.open( login.c_str(), std::ios::in );
    if (!login.c_str()){
        std::cout << "Taki uzytkownik juz istnieje!" << std::endl;
    }else{

        //std::ostringstream mojStrumien;
        //mojStrumien << "Files/" << login << ".ini";

        //std::string const nazwaPliku( "Files/konto.ini" );
        //std::ofstream mojStrumien( nazwaPliku.c_str() );
        std::string loginn = login+".ini";
        std::ofstream mojStrumien( loginn.c_str() );

        mojStrumien << "login = " << login << std::endl;
        mojStrumien << "haslo = " << haslo << std::endl;
        std::cout << "Rejestracja przebiegla prawidlowo." << std::endl;
        mojStrumien.close();
    }
}
edytowany 2x, ostatnio: dawid4157, 2014-06-08 18:41

Pozostało 580 znaków

2014-06-08 18:50
0
if (!login.c_str()){
        std::cout << "Taki uzytkownik juz istnieje!" << std::endl;

To sie nigdy nie wykona, ponieważ funkcja c_str() nie zwróci zera bo czy chcesz czy nie i tak musisz podać jakiś łańcuch znaków, bądź litere.
Co do pytania o nadpisywanie plików, po części odpowiedź leży właśnie w sprawdzaniu czy taki plik (user) już istnieje (chociażby spróbuj otworzyć plik który zostanie podany jako login, jeśli zawiera chociaż jeden znak, to istnieje), Jeśli tak utwórz nowy plik o nazwie np. adam1.
Ale to zadanie pozostawiam Tobie.

edytowany 2x, ostatnio: Proxima, 2014-06-08 18:53
"To sie nigdy nie wykona, ponieważ funkcja c_str() nie zwróci zera bo czy chcesz czy nie i tak musisz podać jakiś łańcuch znaków, bądź litere." Co mam zatem użyć zamiast c_str? - dawid4157 2014-06-08 19:14

Pozostało 580 znaków

2014-06-08 20:02
0

Może wyjaśnij dokładnie co chcesz osiągnąć bo jak narazie nigdzie nie sprawdzasz ani istnienia pliku ani też nie tworzysz żadnego.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-06-08 20:05
0

Mój błąd dodaje się nowy plik(nie zauwżyłem wcześniej, bo patrzałem do innego folderu). Nie wiem za bardzo jak sprawdzić czy istnieje plik o podanej nazwie. Ma ktoś jakieś rady?

Pozostało 580 znaków

2014-06-08 20:07
0
plik.open(FileName,std::ios::in);
if(!plik) // plik nie istnieje.

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
W zasadzie to niezupełnie oznacza, że plik nie istnieje. ;-) - Endrju 2014-06-08 22:01
Dokładniejsze badanie tak czy owak nie jest możliwe ;-) - _13th_Dragon 2014-06-08 22:03
"błąd podczas próby otwarcia pliku" - Azarien 2014-06-08 23:02

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0