Открыть файл с помощью fopen, учитывая абсолютный путь в Windows

Я пытаюсь сделать программу, которая подсчитывает количество строк файла, когда я пытаюсь пройти абсолютный путь к функции 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 Settingsjuegos 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;
}

Как передать абсолютный путь к моей программе, чтобы вы могли открыть файл?

6 ответов


использовать двойные косые черты:

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

он не работает, потому что компилятор проверяет обратную косую черту в литеральной строке вместе со следующим символом и обычно интерпретирует их как один символ во всех. Такие последовательности двух символов в строковых литералах называются escape-последовательности.

последовательности \D и \j не карту ничего (сравните с \n, который соответствует символу новой строки), и в этом случае в стандарте сказано, что компилятор может интерпретировать их по своему усмотрению. Некоторые компиляторы предпочитают игнорировать обратную косую черту, что в вашем случае приведет к эквивалентному:

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

(вы можете попробовать создать файл с этим именем, чтобы проверить, делает ли это ваш компилятор).

правильной escape-последовательностью для обратной косой черты является двойная обратная косая черта, поэтому вы должны написать ее как

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

работает также на windows и linux:/ вместо того, чтобы избежать обратных косых черт \

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

Проверьте пробелы в имени файла. Порезы были правильно нанесены, но пустого места не было.

попробуй:

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


создать новую папку в папке блоков кода

в папке проекта рядом с файлом main и header создайте новый файл " exemple1 "и поместите в него свой файл" file.txt", то

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

учитывая, что все коды и пути правильно набраны, другой возможной причиной, по которой fopen не работает, могут быть ваши свойства проекта - > генерация кода C / C++->библиотека времени выполнения, установленная в /MD, а не /MDd для сборки отладки, этот параметр должен соответствовать конфигурации проекта, XX для выпуска XX (d) для отладки