我试图做一个程序,计算一个文件的行数,当我尝试将绝对path传递给fopen函数,只是告诉我没有find,这是我的代码:
#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; }
我应该如何将绝对path传递给我的程序,以便打开文件?
使用双斜杠:
"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");
检查文件名中的空格。 斜线正确地逃脱了,但空格不是。
尝试:
fopen("C:\\\\Documents\ and\ Settings\\\juegos psps.txt","r")
在Windows和Linux上也可以工作: /
而不是转义反斜杠\\
"C:/dir1/dir2/file.ext"
鉴于所有的代码和路径是正确的类型,另一个可能的原因导致fopen不起作用可能是您的项目属性 – > C / C ++代码生成 – >运行时库设置为/ MD而不是/ MDd的调试版本,这个设置应该对应项目配置XX到版本XX(d)进行调试