¿Nuevo en Xcode no puede abrir archivos en c ++?

He estado usando Windows en una clase que he estado tomando, pero estoy tratando de ejecutar un código básico para descubrir cómo abrir / cerrar / ingresar / sacar de archivos en Xcode y el código que suelo usar en estudios visuales no es t trabajando alguna idea ¿por qué? ¡Gracias!

#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; } 

Coloque sus archivos .txt en el mismo directorio donde se encuentra su archivo main.cpp (o en cualquier lugar que desee).

En Xcode vaya a Producto> Esquema> Editar esquema> Ejecutar prueba (a la derecha)> Opciones (parte superior central)

Abajo en Opciones, marque “Usar directorio de trabajo personalizado” y configúrelo en el directorio donde se encuentran los archivos .txt.

Para trabajar con los archivos, deberá especificar solo los nombres de los archivos, por ejemplo, in_file.open (“inputFile.txt”); no hay camino es necesario.

Aquí hay un enfoque completamente diferente: haga que Xcode copie el archivo de entrada por usted.

  • Seleccione su proyecto en Xcode
  • Seleccione Build Fases
  • Haga clic en el botón ‘+’ para crear una nueva Fase de construcción

Pasos 1-3

  • Seleccionar la nueva fase de comstackción de archivos de copia

Etapa 4

  • Seleccionar directorio de productos
  • Haga clic en el botón ‘+’ para agregar su archivo

Pasos 5-6

  • Haga clic en Agregar otro

Paso 7

  • Seleccione su archivo de entrada y haga clic en Abrir

Paso 8

  • Marque la casilla Copiar elementos … y haga clic en Finalizar

Paso 9

Ahora, cada vez que crea su proyecto, el archivo de entrada se copiará en la misma carpeta que el ejecutable, sin importar dónde esté construido. Por supuesto, para ver el archivo de salida, igual deberá encontrar el ejecutable en Finder.

Las respuestas realmente no explican el problema, así que pensé que haría eso.

Cuando pasa una ruta relativa como “inputFile.txt” a las API de archivos, se trata como relativa al directorio de trabajo cuando se ejecuta el progtwig. Esto es lo mismo que el ‘directorio de trabajo’ cuando utiliza cmd.exe o Terminal.app o las líneas de comando en general. El comando Unix pwd (“print working directory”) muestra el directorio de trabajo actual. En Windows ejecutando el comando cd sin argumentos, realiza la misma función. (En Unix, ejecutar cd sin argumentos cambiará el directorio de trabajo al directorio de inicio del usuario).

Cuando ejecuta un progtwig desde la línea de comando, el shell de línea de comando establece el directorio de trabajo del progtwig. Cuando ejecuta un progtwig desde un IDE, el IDE establece el directorio de trabajo. Dado que, a diferencia de una línea de comando, no hay una respuesta obvia para lo que el IDE debe establecer como el directorio de trabajo, Visual Studio y Xcode establecen el directorio de trabajo en diferentes ubicaciones de manera predeterminada: Visual Studio establece el directorio de trabajo en $(ProjectDir) , directorio que contiene el archivo de proyecto de Visual Studio; Xcode establece el directorio de trabajo para el directorio de productos de comstackción, es decir, la ubicación en la que se escribió el ejecutable.

Algunas posibles soluciones a su problema son:

  1. No use una ruta relativa, y por lo tanto no dependa del directorio de trabajo. Esto no es de mucha ayuda para hacer que el progtwig sea más portátil, porque las rutas absolutas también diferirán entre las plataformas, por lo que aún tendrá que ‘configurar’ el progtwig para cada plataforma. De hecho, usar una ruta absoluta es peor, porque significa que su código fuente debe ser diferente, mientras que sería mejor mantener esa diferencia confinada a la configuración de comstackción de cada plataforma.

  2. Configure el IDE para usar su directorio de trabajo deseado. Visual Studio se puede configurar haciendo clic con el botón derecho en el proyecto, seleccionando Propiedades de configuración> Depuración> Directorio de trabajo, y configurando el directorio de trabajo para la ruta deseada (potencialmente usando las variables de comstackción de Visual Studio).

    La respuesta de nepete describe cómo configurar el trabajo directamente configurado por Xcode.

  3. Configure el proceso de comstackción del IDE para copiar sus archivos de datos en una ubicación adecuada. En Visual Studio, haría esto en un proyecto de C ++ configurando las propiedades del proyecto> Propiedades de configuración> Eventos de comstackción.

    La respuesta de SSteve cubre cómo configurar pasos de comstackción adicionales en Xcode.

Según lo sugerido por nepete, edite el esquema, pero use $ PROJECT_DIR como el directorio de trabajo personalizado. Ayuda a mover el proyecto o trabajar en dos entornos diferentes (por ejemplo, el hogar y la oficina).

Por cierto. $ PROJECT_DIR es una de las variables de entorno Xcode, y también ayuda a pasar los nombres de los archivos como argumentos de línea de comando a los progtwigs (configurables en “Argumentos” en el esquema).

Supongo que tiene inputFile.txt en la carpeta que contiene su código fuente. Eso no va a funcionar. Debe colocarlo en la carpeta que contiene el ejecutable generado. Para encontrar esa carpeta, haga clic derecho en su aplicación en Productos y seleccione Mostrar en el buscador .

enter image description here

Esta imagen muestra lo que parece para un progtwig de línea de comando. También muestra la ventana del Finder que se abrió. Como puede ver, es una carpeta diferente a la que contiene el código fuente.

Versión de línea de comando

He luchado con el mismo problema hoy. Quería agregar código C a mi proyecto Swift y mi puntero de archivo siempre era NULL.

Lamentablemente, en XCode 9 para la aplicación iOS, no pude cambiar el directorio de trabajo. Cambiar las fases de Build tampoco me ayudó. Después de más de 4 horas de prueba y error, eso es lo que finalmente se me ocurrió y funciona:

  1. Al copiar archivos en XCode, elegí “Crear grupos”, pero tuve que elegir “Crear referencias de carpeta”:

enter image description here

  1. Creé un nuevo archivo object-c (.m) y copié todo mi código C ahí.

  2. Dejé archivos .h intactos (encabezado puenteado generado por XCode y mi propio archivo .h con statement de funciones públicas). Ahora mi estructura de proyecto se veía así:

enter image description here

  1. En mi archivo dict.m en lugar de la parte previa simple c fopen :

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

    Agregué código obj-C:

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

¡Y funciona ahora sin ningún problema! ¡Es simplemente increíble!

PD: Decidí escribir esta respuesta en caso de que ayude a alguien como yo y les ahorrará algo de tiempo. Si sabes cómo cambiar el directorio de trabajo en XCode 9 para iOS, por favor, déjame un comentario, ahora tengo curiosidad por saber por qué no puedo encontrarlo.