Nuovo in Xcode non può aprire file in c ++?

Sto usando Windows in una class che sto prendendo, ma sto cercando di eseguire un codice di base per capire come aprire / chiudere / input / output dai file su Xcode e il codice che di solito uso negli studi visivi non è Non ho idea di perché? Grazie!

#include  #include  #include  using namespace std; int main() { ifstream fin; ofstream fout; string input; fin.open("inputFile.txt"); if(fin.fail()) cout << "File failed to open." <> input; fout.open("outputFile.txt"); fout << input; } 

Metti i tuoi file .txt nella stessa directory in cui si trova il tuo file main.cpp (o dove vuoi).

In Xcode vai su Prodotto> Schema> Modifica schema> Esegui test (a destra)> Opzioni (in alto)

Giù sotto Opzioni seleziona “Usa la directory di lavoro personalizzata” e impostalo nella directory in cui si trovano i file .txt.

Per lavorare con i file, dovrai specificare solo i nomi dei file, ad esempio in_file.open (“inputFile.txt”); nessun percorso è necessario.

Ecco un approccio completamente diverso: Xcode copia il file di input per te.

  • Seleziona il tuo progetto in Xcode
  • Seleziona Fasi di creazione
  • Fai clic sul pulsante ‘+’ per creare una nuova fase di costruzione

Passi 1-3

  • Seleziona la fase di creazione di nuovi file di copia

Passaggio 4

  • Seleziona la directory dei prodotti
  • Fai clic sul pulsante ‘+’ per aggiungere il tuo file

Passaggi 5-6

  • Fai clic su Aggiungi altro

Passaggio 7

  • Seleziona il tuo file di input e fai clic su Apri

Passaggio 8

  • Seleziona la casella Copia elementi … e fai clic su Fine

Passaggio 9

Ora ogni volta che si crea il progetto, il file di input verrà copiato nella stessa cartella dell’eseguibile, indipendentemente da dove è stato creato. Ovviamente, per vedere il file di output, sarà comunque necessario trovare l’eseguibile nel Finder.

Le risposte non spiegano veramente il problema, quindi ho pensato di farlo.

Quando si passa un percorso relativo come “inputFile.txt” alle API del file, viene trattato come relativo alla directory di lavoro quando viene eseguito il programma. È lo stesso della “directory di lavoro” quando si utilizza cmd.exe o Terminal.app o le righe di comando in generale. Il comando Unix pwd (“print working directory”) mostra la directory di lavoro corrente. Su Windows che esegue il comando cd senza argomenti esegue la stessa funzione. (Su Unix che esegue cd senza argomenti cambierà la directory di lavoro nella home directory dell’utente.)

Quando si esegue un programma dalla riga di comando, la shell della riga di comando imposta la directory di lavoro del programma. Quando si esegue un programma da un IDE, l’IDE imposta la directory di lavoro. Poiché, a differenza di una riga di comando, non esiste una risposta ovvia a ciò che l’IDE deve impostare come directory di lavoro, Visual Studio e Xcode impostano la directory di lavoro in posizioni diverse per impostazione predefinita: Visual Studio imposta la directory di lavoro su $(ProjectDir) , il directory contenente il file di progetto di Visual Studio; Xcode imposta la directory di lavoro nella directory dei prodotti di costruzione, ovvero nella posizione in cui è stato scritto l’eseguibile.

Alcune possibili soluzioni al tuo problema sono:

  1. Non utilizzare un percorso relativo e quindi non dipende dalla directory di lavoro. Questo non è di grande aiuto nel rendere il programma più portabile, perché anche i percorsi assoluti differiscono tra le piattaforms, quindi dovrai ancora “configurare” il programma per ciascuna piattaforma. In effetti, l’utilizzo di un percorso assoluto è peggiore, perché significa che il codice sorgente deve essere diverso, mentre sarebbe meglio mantenere tale differenza limitata alla configurazione di build di ciascuna piattaforma.

  2. Configura l’IDE per utilizzare la directory di lavoro desiderata. È ansible configurare Visual Studio facendo clic con il pulsante destro del mouse sul progetto, selezionando Proprietà di configurazione> Debug> Directory di lavoro e impostando la directory di lavoro sul percorso desiderato (potenzialmente utilizzando le variabili di compilazione di Visual Studio).

    La risposta di nepete descrive come configurare il funzionamento direttamente impostato da Xcode.

  3. Configura il processo di generazione dell’IDE per copiare i file di dati in una posizione appropriata. In Visual Studio lo si farebbe in un progetto C ++ configurando Proprietà del progetto> Proprietà di configurazione> Crea eventi.

    La risposta di SSteve spiega come configurare ulteriori passi di costruzione in Xcode.

Come suggerito da nepete, modifica lo schema, ma usa $ PROJECT_DIR come directory di lavoro personalizzata. Aiuta a spostare il progetto o a lavorare in due ambienti diversi (ad es. Casa e ufficio).

BTW. $ PROJECT_DIR è una delle variabili di ambiente Xcode e aiuta anche a passare i nomi dei file come argomenti da riga di comando ai programmi (impostabili in “Argomenti” nello schema).

Suppongo che tu abbia inputFile.txt nella cartella che contiene il tuo codice sorgente. Non funzionerà. Devi metterlo nella cartella che contiene l’eseguibile generato. Per trovare la cartella, fai clic con il pulsante destro del mouse sulla tua app sotto Prodotti e seleziona Mostra nel Finder .

inserisci la descrizione dell'immagine qui

Questa immagine mostra come appare un programma a riga di comando. Mostra anche la finestra del Finder che è stata aperta. Come puoi vedere, è una cartella diversa da quella che contiene il codice sorgente.

Versione della riga di comando

Ho lottato con lo stesso problema oggi. Volevo aggiungere il codice C al mio progetto Swift e il mio puntatore di file era sempre NULL.

Sfortunatamente, in XCode 9 per l’app iOS, non ho potuto modificare la directory di lavoro. Anche cambiare le fasi di costruzione non mi ha aiutato. Dopo oltre 4 ore di tentativi ed errori, questo è quello che ho scoperto e funziona:

  1. quando ho copiato i file su XCode, ho scelto “Crea gruppi”, ma avevo bisogno di scegliere “Crea riferimenti alle cartelle”:

inserisci la descrizione dell'immagine qui

  1. Ho creato un nuovo file objective-c (.m) e copiato tutto il mio codice C lì.

  2. Ho lasciato intatti i file .h (XCode ha generato l’intestazione del bridging e il mio file .h con la dichiarazione delle funzioni pubbliche). Ora la mia struttura del progetto assomigliava a questo:

inserisci la descrizione dell'immagine qui

  1. Nel mio file dict.m al posto della precedente plain c fopen part:

     FILE *dic = fopen("dictionary.txt", "r"); 

    Ho aggiunto il codice obj-C:

     NSString *filePath = [[NSBundle mainBundle] pathForResource:@"dictionary" ofType:@"txt"]; FILE *dic = fopen([filePath cStringUsingEncoding: NSUTF8StringEncoding], "r"); 

E ora funziona senza problemi! È semplicemente fantastico!

ps Ho deciso di scrivere questa risposta nel caso in cui aiuterà qualcuno come me e li salverà un po ‘di tempo. Se sai come modificare la directory di lavoro in XCode 9 per iOS, per favore, lasciatemi un commento – ora sono davvero curioso di sapere perché non riesco a trovarlo.