2012-07-13 31 views
12

Estoy tratando de hacer un programa que cuente el número de líneas de un archivo, cuando intento pasar la ruta absoluta a la función fopen, simplemente me dice que es no se ha encontrado, aquí está mi código:Abrir archivo con fopen, ruta absoluta dada en Windows

#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 debería pasar la ruta absoluta a mi programa para que pueda abrir el archivo?

+0

probarlo "C: \\ Documents and Settings \\ juegos psps.txt" – Jeeva

+0

o ' "C:/Documents and Settings/juegos psps.txt"', que también funciona . –

Respuesta

17

Utilice barras dobles:

"C:\\Documents and Settings\\juegos psps.txt" 
+0

@SingerOfTheFail Ya lo intento pero aún no funciona, ¿puedo depender de la versión de mi sistema operativo ?. Me he quedado atrapado en esta hora. – franvergara66

+0

@ Melkhiah66, ¿con qué sistema operativo está ejecutando su programa? Además, ¿estás seguro de que no hay ningún error tipográfico en el nombre del archivo (como un espacio extra, tal vez)? – SingerOfTheFall

+0

@SingerOfTheFail Estoy ejecutando el programa en Windows 7, usando code :: blocks, y no hay ningún error en el nombre del archivo – franvergara66

6

no está funcionando porque el compilador examina una barra invertida en una cadena literal junto con el siguiente carácter y por lo general los interpreta como un carácter en absoluto. Tales secuencias de dos char en literales de cadena se llaman secuencias de escape.

Las secuencias \D y \j no se asignan a nada (contrastar esto con \n que se localiza en el carácter de nueva línea), y en este caso la norma dice que el compilador puede interpretarlas a su antojo. Algunos compiladores prefieren ignorar la barra invertida, que en su caso se traduciría en el equivalente:

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

(puede intentar crear un archivo con este nombre para probar si esto es lo que hace su compilador).

La secuencia de escape correcto para una barra invertida es una doble barra inclinada, por lo que debe escribir como

archivo = fopen("C:\\Documents and Settings\\juegos psps.txt","r"); 
+0

sí, hombre, lo sé. el problema es que cuando pongo doble barra en la ruta igual que no puedo abrir el archivo y el programa ingresa la condición if (file == NULL) – franvergara66

+1

@ Melkhiah66: No hay nada de malo con el código si el nombre del archivo está correctamente especificado, por lo que debería ver si el archivo está allí, permisos, etc. – Jon

1

Compruebe los espacios en el nombre de archivo. Las barras se escaparon correctamente, pero el espacio en blanco no.

Probar:

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

+0

Alguien merece al menos 2 reputación, incluso para respuestas que no tanto ... –

2

funciona tan bien en Windows y Linux: / en lugar de barras invertidas escapan \\

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

Teniendo en cuenta todos los códigos y los caminos están escritos correctamente, otra posible razón que causa fopen no funciona podrían ser sus Propiedades de proyecto-> Generación de código C/C++-> Biblioteca de tiempo de ejecución establecida en/MD en lugar de/MDd para compilación de depuración, esta configuración debe corresponder al proyecto configuración, XX para divulgar XX (d) para depurar

0

crea una nueva carpeta en los bloques de código carpeta

en la carpeta del proyecto junto al archivo principal y la cabecera de hacer el nuevo archivo "exemple1" y poner el archivo en él "archivo.txt", entonces

string nom_fichier; 
nom_fichier = "exemple1/file.txt" ; 
fichier = fopen(nom_fichier.c_str(), "r+"); 
+0

Si bien este código puede responder a la pregunta, proporciona un contexto adicional con respecto a por qué y/o cómo este código responde la pregunta mejora su valor a largo plazo. – rollstuhlfahrer

Cuestiones relacionadas