C++ Filhantering Konsollapplikation Xcode

Tråden skapades och har fått 1 svar. Det senaste inlägget skrevs .
1

Hej håller på med en skolgrej där vi ska lagra data i en txt fil som vi sedan ska kunna skriva till och läsa ifrån. Det funkar ganska bra men det är några saker som dykt upp.

1. Jag läser in filen spelare.txt och registrerar sedan en ny användare i spelare.txt och läser in filen spelare.txt igen. När jag läser in spelare.txt andra gången så hänger sig jämnt programmet och följande felmeddelande skrivs ut "has exited due to signal 11 (SIGSEGV)."

Koden till funktionen kan ses nedan..

//A Function that reads spelare.txt and saves the information to a struct
void ReadFromFile(Post user[]){
	//Creates a input stream with spelare.txt
	ifstream infil;
	
	infil.open("spelare.txt");
	//Reads information from file spelare.txt and saves the information in an struct
	while(infil>>user[ioCounter].login){
		infil>>user[ioCounter].surname;
		infil>>user[ioCounter].name;
		infil>>user[ioCounter].regDate;
		infil>>user[ioCounter].noRounds;
		infil>>user[ioCounter].wonRounds;
		infil>>user[ioCounter].lossRounds;
		infil>>user[ioCounter].drawRounds;
		infil>>user[ioCounter].noGames;
		infil>>user[ioCounter].wonGames;
		infil>>user[ioCounter].lossGames;
		infil>>user[ioCounter].drawGames;
		ioCounter+=1;
	}
	infil.close();
}

2. När jag registrerar en ny användare skulle jag vilja att datorn själv genererar dagens datum (070303). Finns det något käckt sätt att göra detta på.

3. Det tredje problemet uppstår då jag ska köra applikationen utanför Xcode. Programmet fungerar fint men det hittar inte filen. Då jag deklarerar strömmarna för in och utläsning har jag inte använt absolutsökväg utan bara helt enkelt skrivit.

ifstream infil;
	
	infil.open("spelare.txt");

Sedan har jag lagt txt filen på det ställe där konsollapplikationen skapades under release mappen som läggs till i projektets bibliotek. Ska jag istället använda absolutsökväg eller har jag gjort något fel eftersom han inte hittar filen.

alla tips och råd uppskattas.

1. En ren gissning är att du bara allokerat upp minne för user[0]

2. Som allt annat så finns det en massa roliga sätt att göra det på. Här är ett exempel som kanske är lite omständigt.. men lätt att bygga vidare på:

time_t Now = time(NULL);
tm *Time = localtime(&Now);

Då får du tiden snyggt uppsplittad i Time. Du kan t ex få ut timme genom Time->tm_hour, minut genom Time->tm_min, år genom Time->tm_year.. osv.

3. Om du kör filen från en terminal så ska det då räcka med att filen ligger i samma katalog. Jag har löst det genom att ta reda på i vilken katalog den exekverade binären ligger och sen använda det som grund för att hitta applikationens filer. Någon enkel lösning för det känner jag inte till tyvärr.

1
Bevaka tråden