[c++] Qt에서 새 파일 만들기 / 쓰기



Answers

이상 하네, 다 괜찮아 보이는 군, 그게 너에게 효과가 없다고 확신 할 수 있니? 이 main 분명히 나를 위해 작동하기 때문에 다른 곳에서 문제의 근원을 찾을 것입니다.

#include <QFile>
#include <QTextStream>


int main()
{
    QString filename = "Data.txt";
    QFile file(filename);
    if (file.open(QIODevice::ReadWrite)) {
        QTextStream stream(&file);
        stream << "something" << endl;
    }
}

당신이 제공 한 코드 는 QTextStream의 상세한 설명 에서 제공되는 코드와 거의 동일하므로 문제는 다른 곳에서 발생합니다. :)

또한 파일은 Data 이지만 Data.txt 가 아니며 프로그램이 실행 된 디렉터리 (반드시 실행 파일이있는 디렉터리가 아닐 수도 있음)에 만들어져 있어야합니다.

Question

파일에 쓰려고하는데 파일이 존재하지 않으면 만듭니다. 나는 인터넷에서 수색했고 아무것도 나를 위해 일하지 않았다.

내 코드는 현재 다음과 같이 보입니다.

QString filename="Data.txt";
QFile file( filename );
if ( file.open(QIODevice::ReadWrite) )
{
    QTextStream stream( &file );
    stream << "something" << endl;
}

디렉토리에 Data라는 텍스트 파일을 만들면 파일은 비어 있습니다. 아무것도 만들지 않으면 파일을 만들지 못합니다. 나는 이것으로 무엇을 해야할지 모르겠다. 이것은 파일을 만들고 쓰기 위해 노력한 첫 번째 방법이 아니며, 아무런 효과가없는 방법이다.

귀하의 답변에 감사드립니다.




그 원인이 올바른 디렉토리를 찾지 못했을 수도 있습니다. 예를 들어 절대 경로가 없더라도 파일에서 읽을 수는 있지만 쓸 수는없는 것처럼 보입니다.

이 경우 작성을 끝내기 전에 종료 프로그램을 작성하는 것이 좋습니다.

프로그램에서 이벤트 루프 (예 : QMainWindow 와 같은 GUI 응용 프로그램)를 사용하면 문제가되지 않습니다. 그러나 프로그램이 파일에 기록한 직후 종료되면 텍스트 스트림을 플러시해야합니다. 파일을 닫으면 항상 충분하지 않습니다 (소멸자에서 닫히기 때문에 불필요합니다).

stream << "something" << endl;
stream.flush();

이렇게하면 프로그램이이 명령으로 계속 진행되기 전에 변경 내용이 파일에 커밋됩니다.

문제는 QFile이 QTextStream보다 먼저 파괴된다는 것입니다. 따라서 스트림이 생성자에서 플러시 된 경우에도 파일이 이미 닫혀 있으므로 너무 늦습니다.




코드가 완벽하게 잘되었으므로 파일을 찾을 수있는 올바른 위치를 찾고있는 중입니다. 절대 경로를 제공하지 않았으므로 파일은 현재 작업 폴더 (보다 정확하게는 현재 작업 폴더에 있음)에 상대적으로 만들어집니다.

현재 작업중인 폴더는 Qt Creator에서 설정합니다. 프로젝트 >> 선택한 빌드 >> '실행'버튼 ( '빌드'옆)을 누르면이 페이지에있는 내용을 볼 수 있습니다. 물론 변경할 수 있습니다.




Links



Tags

c++ c++   qt qt