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()는 어떻게 사용합니까? –

+0

모든 멤버 함수와 동일합니다. Qt 문서를 가지고 있습니까? –

답변

0

FileError QFile::error() CONST. I/O 장치 상태가 오류 코드를 반환합니다. 예를 들어, open()이 false를 반환하거나 읽기/쓰기 연산이 -1을 반환하면이 함수를 호출하여 연산이 실패한 이유를 찾습니다. unsetError()도 참조하십시오.

오류 코드를 게시하십시오. 그것은 QFile 파일 ("C : \ n.txt")이 아닌가요? \ not/windows에?

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

그리고 항상 :

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

파일이 존재하지만 열리지 않으면

, 당신은 오류 상태 및 메시지를 얻을 수 있습니다 :

+1

다음은 'QFile file ("C : \\ n.txt ");'백 슬래시를 이스케이프 처리해야하기 때문입니다. 그러나/Windows에서 잘 작동하므로 변경할 필요가 없습니다. –

+0

사실, 지원 될 때'/'를 사용하면 응용 프로그램 내부의 문자열에서 확실히 바람직한 경로 구분 기호가됩니다. 포팅을 더 어렵게 만들 이유가 없으며 문자열 내부에서 이스케이프해야하는 숯을 사용할 이유가 없습니다 (잊을 가능성이 있고 불운은 그냥 조용히 잘못된 숯을 얻습니다). – hyde

+0

op가이 질문에 대한 답을 찾았는지 모르지만, 대부분의 경우, 이는 권한 문제로 인해 발생합니다. 프로그램을 디버깅 할 경우 관리자 모드에서 QtCreator를 열어 본 다음 디버그하십시오. 프로그램을 실행하는 동안 관리자 모드에서 cmd.exe 창을 열고 실행 파일을 실행하십시오. 또한 QFile은 QFile ("C : /n.txt")과 QFile ("C : \\ n.txt")을 Windows에서 사용할 수 있지만 파일 경로에 슬래시를 사용하는 것이 좋습니다. – code82

5

파일을 열기 전에, 당신은 항상 existense을 확인할 수 있습니다 : 파일이 openend라면, 닫는 것을 잊지 마십시오. 귀하의 예에서는 다음을 수행하지 않았습니다.

file.close(); 
+7

소멸자가 호출되면 파일이 자동으로 닫힙니다. –