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

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;

	}


}
0

Sprawdź co napisałem w komentarzu, a poza tym 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ć.

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

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

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();
	}
}
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.

0

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

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?

0
plik.open(FileName,std::ios::in);
if(!plik) // plik nie istnieje.

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