我试图使计数文件的行数,当我尝试的绝对路径传递给fopen函数的程序,仅仅是告诉我,是找不到的,这里是我的代码:
#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:\\Documents and Settings\\juegos psps.txt"
它不工作,因为编译器检查与下一个字符文字串在一起反斜杠,通常会将它们解释为在所有一个字符。 在字符串这样的两个字符序列被称为转义序列 。
序列\D
和\j
没有映射到任何东西(对比度这与\n
映射到换行字符),在这种情况下,标准指出,编译器可以将其解释为它选择。 一些编译器选择忽略反斜杠,而你的情况会导致相当于:
archivo = fopen("C:Documents and Settingsjuegos psps.txt","r");
(你可以尝试创建一个文件,这个名字来测试,如果这是你的编译器做什么)。
反斜杠正确的转义序列是一个双反斜线,所以你应该把它写成
archivo = fopen("C:\\Documents and Settings\\juegos psps.txt","r");
工程,以及在Windows和Linux: /
,而不是逃避反斜杠\\
"C:/dir1/dir2/file.ext"
检查文件名中的空格。 斜线进行了适当逃过一劫,但空格不是。
尝试:
fopen("C:\\\\Documents\ and\ Settings\\\juegos psps.txt","r")
创建一个新文件夹中的代码块的文件夹
在旁边的主头文件的项目文件夹中做出新的文件“exemple1”,并把你的文件,文件“file.txt”,然后
string nom_fichier;
nom_fichier = "exemple1/file.txt" ;
fichier = fopen(nom_fichier.c_str(), "r+");
鉴于所有代码和路径键入正确,另一个可能的原因导致的fopen不工作可能是你的项目属性 - > C / C ++代码发生 - >运行时库设置为/ MD而非/ MDD的调试版本,此设置应对应项目配置,XX为Release XX(d)到调试