Qt не видит текстовый файл С++

Вот пример кода.

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{

    std::cout << "Текущая рабочая директория: " << std::filesystem::current_path() << std::endl;

    if (!std::filesystem::exists("fst.txt")) {
        std::cerr << "Файл не найден: " << "fst.txt" << std::endl;
        return 1;
    }


    Database* db = new Database("test_database.db");
    db->open();

    bool result = db->insertQuestion("fst.txt");
    if (!result){
        std::cout << "Error" << std::endl;
        return 1;
    }



    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

Почему то Qt не видит файл fst.txt в проекте. Уже проверил права доступа, менял рабочую директорию а также расположение самого файла. Ничего не помогает. При этом файл базы данных спокойно виден.

Вот файл сборки .pro :

QT       += core gui sql

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++17

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    database.cpp \
    main.cpp \
    mainpage.cpp \
    mainwindow.cpp \
    dataentry.cpp \
    testlist.cpp \
    testpage.cpp

HEADERS += \
    database.h \
    mainpage.h \
    mainwindow.h \
    dataentry.h \
    testlist.h \
    testpage.h

FORMS += \
    mainwindow.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target



Ответы (1 шт):

Автор решения: anrej0705

Чтобы файл открывался, вам нужно предоставить полный путь к файлу, строка if (!std::filesystem::exists("fst.txt")) { должна поменять свой вид на if (!std::filesystem::exists("C:\fst.txt")) {

В качестве бонуса: если хотите работать с файлом при помощи QT, то используйте QFile. Этот класс довольно мощный, и содержит обилие инструментов для различной работы с файлами. Простой пример как открыть файл с помощью этого класса:

QFile txtObject;
QString filePath = "C:\Users\anrej0705\mytext.txt" //Пусть это будет файл с кодировкой UTF-8, который надо открыть
txtObject.setFileName(filePath);

QString myText; //Сюда будет прочитано содержимое файла

//Проверим чтобы файл бы не больше 1 мегабайта, чтобы не открывать его долго
if(txtObject.size() > 1048576)
{
    std::cout << "Large file size! >1 Mb" << endl;
    return 0; //Выход из main
}

//Пытаемся открыть...
if(txtObject.open(QIODevice::ReadOnly))
{   //Я открыл только для чтения, если вам нужно записать то используйте например WriteOnly
    QTextStream txtStream(&txtObject);
    txtStream.setCodec("UTF-8");  //Задаём кодировку, которая будет применена в попытке прочитать
    myText = txtStream.readAll(); //Читаём всё в нашу стрингу
    txtObject.close(); //Закрываем файл
}
else
{
    std::cout << "Can`t open file" << endl;
}

//дальше ваш код...

Это конечно не моё дело, но я бы предложил учебник Макса Шлее, он очень хорошо рассказывает основы Qt

→ Ссылка