2011-03-30 17 views
19

Acabo de instalar Xcode 4 y estoy tratando de redirigir la entrada de un archivo a mi programa C++. Intenté usar el "< infile.txt" habitual en la sección "Argumentos" de mi esquema de ejecución, pero no funcionó. Pude redirigir la entrada y salida en Xcode 3 muy bien (editando los argumentos para el ejecutable). ¿Alguna sugerencia sobre cómo hacer esto en la nueva versión?Redireccionamiento de E/S en Xcode 4

Gracias!

Samer

+1

Xcode 4 parece tener muchos problemas iniciales, a menos que necesite distribuir aplicaciones a través de la Mac App Store, entonces le sugiero que se quede con 3.2.6 hasta que lleguemos a al menos 4.1. –

+0

En Xcode 5.1.1 (5B1008), agregar ' ma11hew28

+0

Actualizar a Xcode 8 – Max

Respuesta

8

Probé con varios tipos de argumentos y parece que Xcode tiene un error con argumentos (última prueba: Xcode 8).

Pero hay una alternativa para simular con un efecto similar. Debe usar las variables de entorno.

Agregar una variable de entorno con el nombre del archivo que desea redirigir:

enter image description here

Luego, en el código que hay que "redirigir" este archivo a la entrada estándar (CIN):

#include <iostream> 
#include <string> 
#include <fstream> 

using namespace std; 

int main (int argc, const char * argv[]) 
{ 
    ifstream arq(getenv("MYARQ")); 
    cin.rdbuf(arq.rdbuf()); 

    string value; 
    cin >> value; 
    cout << value; 

    return 0; 
} 

eso es todo ... sólo 2 líneas de código

ifstream arq(getenv("MYARQ")); 
cin.rdbuf(arq.rdbuf()); 

no es la mejor solución, pero mientras xcode tiene este problema, ¡esta es la única solución!

+0

Para conocer el valor de la variable de entorno, escriba en la ruta completa del archivo test.txt (en una Mac, simplemente puede arrastrar un archivo al espacio). ¡Esta sigue siendo una solución válida a partir del 9 de febrero de 2017! – Max

+0

Edite la respuesta para decir "XCode 8" ya que esta solución funciona en OS Sierra. – Max

+1

@Max gracias por el comentario (y por probarlo en Xcode 8) - actualizando la respuesta ahora –