使用fopen打开Windows系统中给定绝对路径的文件

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;
}

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


尝试使用 "C:\Documents and Settings\juegos psps.txt" - Jeeva
或者 "C:/Documents and Settings/juegos psps.txt",这也是可以的。 - Bo Persson
6个回答

21

使用双斜线:

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

@SingerOfTheFail 我已经尝试过了,但仍然不起作用,可能取决于我的操作系统版本?我已经卡在这里一个小时了。 - franvergara66
@Melkhiah66,你在哪个操作系统下运行程序?另外,你确定文件名没有拼写错误(比如多了一个空格)吗? - SingerOfTheFall
@SingerOfTheFail 我正在Windows 7中运行程序,使用code::blocks,文件名没有拼写错误。 - franvergara66
@Melkhiah66,在这种情况下,这很奇怪,因为这段代码对我来说运行得很好。也许你的程序没有读取文件的权限? - SingerOfTheFall

7
由于编译器通常会将文本字符串中的反斜杠和下一个字符一起解释为一个字符,因此该代码无法正常工作。这种在字符串字面值中的两个字符序列称为转义序列。而 \D 和 \j 这两个序列并没有映射到任何东西(与 \n 不同,它映射到换行符),在这种情况下,标准规定编译器可以按照自己的方式解释它们。有些编译器选择忽略反斜杠,这样在您的情况下会得到等效的结果:
archivo = fopen("C:Documents and Settingsjuegos psps.txt","r");

你可以尝试创建一个文件,文件名与此相同,以测试编译器的行为。

反斜杠的正确转义序列是双反斜杠,因此您应该将其写为

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

是的,我知道。问题在于,当我在路径中输入双斜杠时,文件无法打开,程序进入if(file == NULL)条件。 - franvergara66
1
@Melkhiah66:如果文件名正确指定,代码没有问题,所以你应该查看文件是否存在、权限等问题。 - Jon

3

在Windows和Linux上同样有效:使用/代替反斜杠\\的转义

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

1
检查文件名中的空格。反斜杠已经被正确转义,但是空格没有被转义。
尝试: fopen("C:\\\\Documents\ and\ Settings\\\juegos psps.txt","r")

0

在Code Blocks文件夹中创建一个新文件夹

在项目文件夹中,与主文件和头文件并列创建一个名为“exemple1”的新文件,并将您的文件“file.txt”放入其中,然后

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

虽然这段代码可能回答了问题,但是提供关于为什么和/或如何回答问题的额外上下文可以提高其长期价值。 - rollstuhlfahrer

-1

假设所有代码和路径都正确输入,导致fopen无法工作的另一个可能原因是您的项目属性-> C/C++代码生成->运行时库设置为/MD而不是/MDd用于调试构建,此设置应与项目配置相对应,XX表示发布,XX(d)表示调试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接