13

我正在尝试制作一个计算文件行数的程序,当我尝试将绝对路径传递给 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;
}

我应该如何将绝对路径传递给我的程序,以便您可以打开文件?

4

6 回答 6

21

使用双斜杠:

"C:\\Documents and Settings\\juegos psps.txt"
于 2012-07-13T07:39:46.680 回答
7

它不起作用,因为编译器会检查文字字符串中的反斜杠以及下一个字符,并且通常将它们解释为一个字符。字符串文字中的这种双字符序列称为转义序列

序列\D\j不映射到任何东西(与\n映射到换行符的对比),在这种情况下,标准说编译器可以根据自己的选择解释它们。一些编译器选择忽略反斜杠,在您的情况下会导致等效:

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

(您可以尝试创建一个具有此名称的文件来测试这是否是您的编译器所做的)。

反斜杠的正确转义序列是双反斜杠,所以你应该把它写成

archivo = fopen("C:\\Documents and Settings\\juegos psps.txt","r");
于 2012-07-13T07:45:08.347 回答
3

在 Windows 和 linux 上也能正常工作:/而不是转义反斜杠\\

"C:/dir1/dir2/file.ext"
于 2014-01-31T17:34:50.183 回答
1

检查文件名中的空格。斜线已正确转义,但空白区域未正确转义。

尝试:

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

于 2013-02-09T21:55:22.343 回答
0

在代码块文件夹中创建一个新文件夹

在主文件和头文件旁边的项目文件夹中创建新文件“exemple1”并将您的文件放入其中“file.txt”,然后

string nom_fichier;
nom_fichier = "exemple1/file.txt" ;
fichier = fopen(nom_fichier.c_str(), "r+");
于 2018-03-06T15:42:10.937 回答
-1

鉴于所有代码和路径都正确键入,导致 fopen 不起作用的另一个可能原因可能是您的项目属性-> C/C++ 代码生成-> 运行时库设置为 /MD 而不是 /MDd 用于调试构建,此设置应该对应项目配置,XX为Release XX(d)为Debug

于 2015-10-08T02:03:25.230 回答