使用fopen打开文件,在Windows上给定绝对路径

问题描述 投票:13回答:6

我正在尝试创建一个计算文件行数的程序,当我尝试将绝对路径传递给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++ windows file fopen relative-path
6个回答
17
投票

使用双斜杠:

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

6
投票

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

序列\D\j不映射到任何东西(与映射到换行符的\n形成对比),在这种情况下,标准表示编译器可以按其选择解释它们。有些编译器会选择忽略反斜杠,在您的情况下会产生相应的反斜杠:

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

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

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

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

3
投票

在Windows和Linux上运行良好:/而不是逃避反斜杠\\

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

1
投票

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

尝试:

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


0
投票

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

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

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

-1
投票

如果所有代码和路径都正确输入,导致fopen不起作用的另一个可能原因可能是您的Project Properties-> C / C ++代码生成 - >运行时库设置为/ MD而不是/ MDd for Debug build,此设置应该对应项目配置,XX与Release XX(d)对应Debug

© www.soinside.com 2019 - 2024. All rights reserved.