2013-03-25 2 views
0

У меня есть программа, которую я в основном украл с веб-сайта Qt, чтобы попытаться открыть файл. Программа отказывается открывать все, что я смущен, почему. Я искал много документации, но ничего не нашел, вы можете объяснить, почему это не работает.QFile не откроет файл

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include <QFile> 
#include <QTextStream> 
#include <QString> 
MainWindow::MainWindow(QWidget *parent) : 
    QWidget(parent) 
{ 
    QFile file("C:/n.txt"); 
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) 
      return; 
    QTextStream in(&file); 
    QString f=in.readLine(); 
    lab =new QLabel("error",this); 
    lab->setGeometry(100,100,100,100); 
    lab->setText(f); 

} 
+3

Что возвращает метод QFile :: error()? –

+1

Как использовать QFile :: error(). – 2013-03-25 16:43:05

+0

Как и любая функция-член. У вас есть документация Qt, не так ли? – 2013-03-25 17:31:51

ответ

0

FileError QFile::error() Const Возвращает статус ошибки файла. Состояние устройства ввода-вывода возвращает код ошибки. Например, если open() возвращает false или операция чтения/записи возвращает -1, эту функцию можно вызвать, чтобы выяснить причину, по которой операция не удалась. См. Также unsetError().

Опубликовать код ошибки. Не предполагается ли это файл QFile («C: \ n.txt»); \ not/в окнах?

+1

Тогда это должен быть 'QFile-файл (« C: \\ n.txt ");' потому что обратная косая черта должна быть экранирована. Но/отлично работает в Windows, поэтому нет необходимости его менять. – 2013-03-25 17:20:14

+0

Действительно, при поддержке, используя '/', определенно предпочтительный разделитель пути в строках внутри приложения. Нет причин делать портирование труднее, и нет причин использовать символ, который нуждается в побеге внутри строк (с возможностью забыть, и с несчастью просто молча получить неправильный символ). – hyde

+0

Не знаю, нашел ли op ответ на этот вопрос, но в большинстве случаев это происходит из-за проблем с разрешением. Если вы отлаживаете свою программу, попробуйте открыть QtCreator в режиме администратора, а затем отлаживать. Во время запуска вашей программы откройте окно cmd.exe в режиме администратора и запустите исполняемый файл. Кроме того, QFile работает в обоих направлениях: например QFile («C: /n.txt»), а также QFile («C: \\ n.txt») в Windows, хотя предпочтительным способом является использование косой черты в пути к файлу. – code82

5

Перед открытием файла, вы всегда можете проверить existense:

QFile file("myfile.txt"); 
if (!file.exists()) { 
    // react 
} 

Если файл существует, но не открывается, вы можете получить состояние ошибки и сообщение:

QString errMsg; 
QFileDevice::FileError err = QFileDevice::NoError; 
if (!file.open(QIODevice::ReadOnly)) { 
    errMsg = file.errorString(); 
    err = file.error(); 
} 

И всегда: если файл был открыт, тогда не забудьте закрыть его. В вашем примере вы не указали:

file.close(); 
+7

Файл автоматически закрывается при вызове его деструктора. – 2013-03-26 07:33:10

Смежные вопросы