【问题标题】:Open file with fopen, given absolute path on Windows使用 fopen 打开文件,在 Windows 上给定绝对路径
【发布时间】:2012-07-13 01:08:37
【问题描述】:

我正在尝试制作一个计算文件行数的程序,当我尝试将绝对路径传递给 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”
  • "C:/Documents and Settings/juegos psps.txt",也可以。

标签: c++ windows file fopen relative-path


【解决方案1】:

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

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

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

【讨论】:

  • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      检查文件名中的空格。斜线被正确转义,但空格没有。

      试试:

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

      【讨论】:

        【解决方案5】:

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

        序列\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)
        • @Melkhiah66:如果正确指定了文件名,则代码没有问题,因此您应该查看文件是否存在,权限等。
        【解决方案6】:

        使用双斜线:

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

        【讨论】:

        • @SingerOfTheFail 我已经尝试过了,但仍然无法正常工作,可能取决于我的操作系统版本?我被这个小时困住了。
        • @Melkhiah66,你在什么操作系统下运行你的程序?另外,您确定文件名中没有拼写错误(可能是多余的空格)?
        • @SingerOfTheFail 我在 Windows 7 中运行程序,使用 code::blocks,而不是文件名中没有拼写错误
        • @Melkhiah66,在这种情况下这很奇怪,因为这段代码对我来说确实工作得很好。也许您的程序没有读取文件的权限?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-31
        • 1970-01-01
        • 2017-09-05
        • 1970-01-01
        • 1970-01-01
        • 2020-08-09
        • 1970-01-01
        相关资源
        最近更新 更多