2015-01-27 18 views

risposta

4

Se si utilizza fopen o qualcosa di simile e si passa semplicemente a "data.txt", si presume che tale file si trovi nella directory di lavoro corrente del programma in esecuzione (quello appena compilato).

Quindi, o

  1. i percorsi completi, invece, come fopen("/full/path/to/data.txt"), in cui si utilizza il percorso completo effettivo

  2. (non è preferibile), spostare data.txt alla directory in cui viene eseguito Clion i suoi programmi compilati da.

(per 2 #, ecco un modo hacky per ottenere quella directory)

char buf[1024]; // hack, but fine for this 
printf("%s\n", getcwd(buf, 1024)); 
2

ho trovato un altro modo per risolvere questo problema.

@Lou La soluzione di Franco può influire sulla struttura del progetto. Ad esempio, se distribuisco il codice su un server, dovrei spostare il file di risorse in una directory specifica.

quello che faccio è modificare il CMakeLists.txt, su Windows, utilizzando

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "D:\\science\\code\\English-Prediction") 

CMAKE_RUNTIME_OUTPUT_DIRECTORY è una variabile CMake, assegna la directory di lavoro di directory di lavoro Clion.

1
  1. Run/modificare le configurazioni ...
  2. selezionare l'applicazione (sulla lefthandside della finestra)
  3. Specificare Directory di lavoro
  4. Applicare

Ora è possibile fopen relativamente da lavorare directory.

+0

Questo ha funzionato per me. Grazie – pyetti

0

Continuando con le variabili di CMakeLists CMAKE_RUNTIME_OUTPUT_DIRECTORY, faccio quanto segue. Nella directory principale del mio progetto, creo una directory, ad esempio out.Poi, nel mio CMakeLists.txt ho impostato la CMAKE_RUNTIME_OUTPUT_DIRECTORY a quella directory:

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/out) 

nota, che deve venire prima di avere

add_executable(YourProject ${SOURCE_FILES}) 

Potrei anche aggiungere che invece di utilizzare fopen() vorrei tenere più oggetti -orientato utilizzando std::ifstream:

std::ifstream inFile("data.txt"); 
// check if it opened without issue... 
if (!inFile) { 
    processError(); // a user-defined function to deal with the issue 
} else { 
    // All is good, carry on... 
    // and when you're done don't forget 
    inFile.close(); 
} 
Problemi correlati