He estado tratando de abrir un archivo y el texto de salida, pero me siguen saliendo los errores. Así que pensé que iba a comenzar desde el principio y solo intente abrir el archivo. Este es mi código:

#include <stdio.h>
#include <stdlib.h>
#define CORRECT_PARAMETERS 3

int main(void)
{
    FILE *file;
    file = fopen("TestFile1.txt", "r");
    if (file == NULL) {
        printf("Error");
    }
    fclose(file);
}

Cuando ejecuto el archivo “Error” que se imprime en la consola y eso es todo. El TestFile1.txt está en la misma ubicación como a mi .exe. ¿Cómo puedo solucionar este problema?

OriginalEl autor jet | 2009-11-17

8 Comentarios

  1. 21

    Lugar de printf("Error");, usted debe tratar de perror("Error") que puede imprimir la razón real de la falla (como el Problema de Permiso, el Argumento no Válido, etc).

    Si usted encuentra perror no lo suficientemente flexible, también se podría utilizar printf("Error: %d (%s)\n", errno, strerror(errno)) o incluso printf("Error: %m\n") (Glibc extensión).

    OriginalEl autor Kousik Nandy

  2. 10

    ¿Cómo estás ejecutando el archivo? Es desde la línea de comandos o desde un IDE? El directorio que el archivo ejecutable está en no es necesariamente el directorio de trabajo.

    Trate de usar el nombre completo de la ruta en el fopen y ver si eso lo arregla. Si es así, entonces el problema es como se describe.

    Por ejemplo:

    file = fopen("c:\MyDirectory\TestFile1.txt", "r");
    file = fopen("/full/path/to/TestFile1.txt", "r");

    O abra una ventana de comandos y vaya al directorio donde el archivo ejecutable está, a continuación, ejecute manualmente.

    Como un aparte, se puede insertar un simple (para Windows o Linux/UNIX/BSD/etc respectivamente):

    system ("cd")
    system("pwd")

    antes de la fopen para mostrar en qué directorio te encuentras realmente en.

    No hay necesidad para las barras diagonales inversas, que a menudo conducen a errores sutiles por las personas que tienen problemas para conseguir cosas como fopen() a trabajar. Se debe recomendar el uso de barras diagonales.
    Yo no lo recomiendo hacia adelante ni hacia atrás barras dado que la norma no impone el formato del nombre de archivo. Pero te estás perdiendo el punto, si usted votada abajo para que la razón – la intención era solo para demostrar el uso de una ruta completa del archivo.
    Podría usted por favor, eche un vistazo a la siguiente: FILE *pFile = NULL; const char *filename = "E:/CODE/TEST/test.txt"; pFile = fopen(filename, "r"); y me dicen lo que me falta o haciendo mal. También traté de: const char *filename = "E:\\CODE\\TEST\\test.txt";. Nada parece funcionar. El programa se ejecuta pero se imprime nada en cmd. Se muestra la siguiente advertencia: Warning 1 warning C4133: 'function' : incompatible types - from 'FILE *' to 'const char *. IDE: VS 2013.
    pida a un pregunta no deje un comentario. De esa manera, usted obtendrá mucho más de la exposición. Como una conjetura, yo sugeriría que usted está usando filename en algún lugar donde usted debe utilizar pFile, o viceversa.

    OriginalEl autor paxdiablo

  3. 5

    Una comprobación de error poco va un largo camino, siempre se puede probar el valor de errno o llame perror() o strerror() para obtener más información acerca de por qué la llamada a fopen() failed.

    De lo contrario, las sugerencias acerca de la comprobación de la ruta de acceso está probablemente en lo cierto… lo más probable es que no está en el directorio que usted piensa que son desde el IDE y no tienes los permisos que usted espera.

    OriginalEl autor Rob Pelletier

  4. 4

    Bueno, ahora usted sabe que hay un problema, el siguiente paso es averiguar qué es exactamente el error, lo que sucede cuando usted compilar y ejecutar este?:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
        FILE *file;
        file = fopen("TestFile1.txt", "r");
        if (file == NULL) {
          perror("Error");
        } else {
          fclose(file);
        }
    }

    OriginalEl autor Robert Gamble

  5. 3

    Su ejecutable del directorio de trabajo es, probablemente, ajustado a algo distinto de el directorio donde se guarda. Compruebe su configuración de IDE.

    Yep. Por ejemplo, Visual Studio puede establecer el directorio actual donde la solución (.sln) archivo mientras que el archivo EXE pueden estar abajo en la carpeta “Debug”.

    OriginalEl autor Mark Rushakoff

  6. 1

    Trate de usar una ruta absoluta para el nombre de archivo. Y si usted está utilizando Windows, utilice getlasterror() para ver el mensaje de error real.

    OriginalEl autor rplusg

  7. 0

    La carpeta de salida directorio debe haber sido configurado para algún otro directorio en el IDE. Usted puede cambiar o reemplazar el nombre de archivo con toda la ruta de acceso del archivo.

    Espero que esto ayude.

    Grandes comentarios. Ahora soy capaz de abrir mi archivo de al menos manualmente de esta manera. ¿Cómo lo haría desde la línea de comandos de Visual Studio? He intentado esto en XCode mediante la adición de parámetros, pero simplemente no estaba funcionando para mí. Tenía la esperanza de que Visual Studio me iba a dar más suerte. Gracias!
    XCode y Visual Studio puede establecer diferentes directorios de trabajo, pero el problema es el mismo, y así es la solución. Es necesario incluir el código de la aplicación que cambia el directorio que desee.

    OriginalEl autor Richie

  8. 0

    Además de lo anterior, usted podría estar interesado en mostrar el directorio actual:

    int MAX_PATH_LENGTH = 80;
    char* path[MAX_PATH_LENGTH];
    getcwd(path, MAX_PATH_LENGTH);
    printf("Current Directory = %s", path);

    Esto debería funcionar sin problema en un gcc/glibc plataforma. (Estoy más familiarizado con ese tipo de plataforma). No era una pregunta publicado aquí que hablaba acerca de getcwd & Visual Studio si estás en un Windows tipo de plataforma.

    OriginalEl autor Dan

Dejar respuesta

Please enter your comment!
Please enter your name here