std :: :: ifstream open () non funziona
Domanda
sto sviluppando un prototipo di un gioco, e alcune regole di gioco devono essere definite in un file ini in modo che il game designer possono modificare i parametri di gioco senza la necessità di aiuto da parte mia, oltre a una ri-compilazione. Questo è quello che sto facendo attualmente:
std::ifstream stream;
stream.open("rules.ini");
if (!stream.is_open())
{
throw new std::exception("Rule file could not be opened");
}
// read file contents here
stream.close();
Tuttavia, il mio flusso non si apre mai successo. Immersioni in profondità nella sorgente AWL durante il debug rivela che _getstream () (come definito nella stream.ce) continua a ritornare NULL, ma io proprio non riesco a capire perché questo è. Aiuto, chiunque?
:Edit:. Rules.ini si trova nella stessa directory del file exe
Soluzione
si stanno assumendo che il directory di lavoro è la directory che il vostro eseguibile risiede in. Questa è una cattiva ipotesi.
Il tuo eseguibile può essere eseguito da qualsiasi directory di lavoro, quindi di solito è una cattiva idea di hard-code percorsi relativi nel software.
Se si vuole essere in grado di accedere ai file relativi alla posizione del vostro eseguibile, è necessario innanzitutto determinare il percorso del file eseguibile e creare un percorso completo da questo.
È possibile ottenere il nome del vostro eseguibile esaminando il parametro argv[0]
passato a main()
. In alternativa, se siete su Windows, è possibile ottenere con GetModuleFileName()
passando NULL come primo parametro.
Altri suggerimenti
è la portata del vostro flusso aperto corretto.
"rules.ini" non è un percorso completo per cui deve essere relativa in modo da che cosa è relativo al. Oppure avete bisogno di usare il percorso completo lì.
(ipotesi selvaggio qui) si sta utilizzando Visual Studio. Durante il debug, il programma sta andando a cercare la directory del progetto per "rules.ini"
Tuttavia, se si tenta di eseguire il programma da "myproject / debug / MYEXE.EXE", dovrebbe funzionare bene perché sta andando per la ricerca "/ debug" per rules.ini
Come il suo stata menzionata è necessario specificare il percorso completo a causa percorso relativo tende a portare ad errori