Estoy tratando de hacer un programa que cuenta el número de líneas de un archivo, cuando intento pasar la ruta de acceso absoluta a la función fopen, simplemente me dice que no se encuentra, aquí está mi código:

#include <iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

int main(int argc, char *argv[])
{
    int i=0;
    char array[100];

        char caracteres[100];
        FILE *archivo;
        archivo = fopen("C:\Documents and Settings\juegos psps.txt","r");
        if (archivo == NULL){cout<<"Dont Work";}
        while (feof(archivo) == 0)
        {
                fgets(caracteres,100,archivo);
                i++;
                }
                cout << "Number of lines:" << i ;
                return 0;
}

¿Cómo debo pasar la ruta de acceso absoluta a mi programa para que pueda abrir el archivo?

intentar “C:\\Documents and Settings\\juegos psps.txt”
O "C:/Documents and Settings/juegos psps.txt", que también funciona.

OriginalEl autor franvergara66 | 2012-07-13

6 Comentarios

  1. 17

    Utilizar dos barras diagonales inversas:

    "C:\Documents and Settings\juegos psps.txt"
    Yo ya intente eso, pero todavía no funciona, puede depender de la versión de mi sistema operativo?. He sido atrapado con esta hora.
    bajo qué sistema operativo se está ejecutando su programa? También, esté seguro de que no hay error tipográfico en el nombre de archivo (como un espacio de más tal vez)?
    Im ejecutar el programa en Windows 7, con code::blocks, y no hay ningún error tipográfico en el nombre de archivo
    bueno, eso es muy raro en este caso, ya que este código funciona muy bien para mí. Tal vez el programa no tiene el permiso para leer el archivo?

    OriginalEl autor SingerOfTheFall

  2. 6

    No está funcionando debido a que el compilador analiza una barra diagonal inversa en un literal de cadena, junto con el siguiente carácter y generalmente se interpreta como un carácter en absoluto. Esos dos-char las secuencias en los literales de cadena son llamados secuencias de escape.

    Las secuencias \D y \j no mapa para nada (esto contrasta con \n que asigna el carácter de nueva línea), y en este caso, la norma dice que el compilador puede interpretar como quiera. Algunos compiladores elegir ignorar la barra invertida, que en su caso el resultado sería el equivalente a:

    archivo = fopen("C:Documents and Settingsjuegos psps.txt","r");

    (Se puede tratar de crear un archivo con este nombre a probar si es lo que tu compilador).

    La correcta secuencia de escape para una barra diagonal inversa es un doble barra invertida, por lo que debe escribir como

    archivo = fopen("C:\Documents and Settings\juegos psps.txt","r");
    sí hombre, eso lo sé. el problema es que cuando me pongo doble barra para el camino justo, ya que no puedo abrir el archivo y el programa entra en la condición if (archivo == NULL)
    No hay nada malo con el código si el nombre de archivo es especificado correctamente, por lo que debe estar buscando si el archivo está ahí, permisos, etc.

    OriginalEl autor Jon

  3. 2

    funciona tan bien como en windows y linux: / en lugar de escapar de barras diagonales inversas \\

    "C:/dir1/dir2/file.ext"

    OriginalEl autor Preexo

  4. 1

    Verificación de los espacios en el nombre. Las barras fueron correctamente escapó, pero el espacio en blanco que no era.

    Tratar:

    fopen("C:\\\\Documents\ and\ Settings\\\juegos psps.txt","r")

    Nadie se merece al menos 2 reputación, incluso para las que no tanto…

    OriginalEl autor Greg S

  5. 0

    hacer una nueva carpeta en la carpeta de bloques de código

    en la carpeta del proyecto junto a la principal y el archivo de encabezado de hacer un archivo nuevo “exemple1” y poner el archivo en ella “file.txt”entonces

    string nom_fichier;
    nom_fichier = "exemple1/file.txt" ;
    fichier = fopen(nom_fichier.c_str(), "r+");
    Mientras que este código puede responder a la pregunta, proporcionar contexto adicional acerca de por qué y/o cómo este código responde a la pregunta que mejora su valor de largo plazo.

    OriginalEl autor Athimni Iheb

  6. -1

    Dado todos los códigos y las rutas están correctamente escrito, otra posible razón que hace que fopen no funciona podría ser su Proyecto de Propiedades-> C/C++ Generación de Código->Biblioteca de tiempo de ejecución se establece en /MD en lugar de /MDd para generación de Depuración, este valor debe corresponder a la configuración del proyecto, XX para Liberar XX(d) para Depurar

    OriginalEl autor liyi3c

Dejar respuesta

Please enter your comment!
Please enter your name here