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 шт):
Чтобы файл открывался, вам нужно предоставить полный путь к файлу, строка 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