2014-11-20 4 views
0

튜토리얼 here을 따라 가고 Qt 객체를 직렬화하려고합니다. 여기 내 코드입니다 :이 프로그램을 실행하면 파일이 바탕 화면 모든 권리에QDataStream에서 데이터를 직렬화 할 수 없습니다.

QFile file("/Users/kaustav/Desktop/boo.dat"); 
if (!file.open(QIODevice::WriteOnly)) { 
    qDebug() << "Cannot open file for writing: " 
     << qPrintable(file.errorString()) << endl; //no error message gets printed 
    return 0; 
} 
QDataStream out(&file); // we will serialize the data into the file 
out.setVersion(QDataStream::Qt_5_3); //adding this makes no difference 
out << QString("the answer is"); // serialize a string 
out << (qint32)42; 

을 작성되는,하지만 그 크기는 비어 0 KB입니다. 당연히이 다음을 시도해보십시오.

QFile file("/Users/kaustav/Desktop/boo.dat"); 
file.open(QIODevice::ReadOnly); 
QDataStream in(&file); // read the data serialized from the file 
in.setVersion(QDataStream::Qt_5_3); 
QString str; 
qint32 w; 
in >> str >> w; 

str에 빈 문자열이 표시됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 도움이 필요하면 Qt 5.2.1을 기반으로 Qt Creator 3.1.1을 사용하고 있습니다.

답변

1

open을 호출 할 때 오류가 반환되는지 확인하고 끝내면 file.close()를 사용하여 파일을 닫아야합니다.

Qt 5를 사용하는 경우 데이터를 저장할 때 실제로 QSaveFile을 사용해야합니다.

+0

클로이 (클로즈업) 추가! 그런데 왜 나는 그것을 필요로합니까! C++에서 파일 핸들은 변수가 닫히면 자동으로 닫힙니다. 그렇죠? – SexyBeast

+0

QFile에 대한 Qt 소스 코드를 보면 스트림을 플러시 (flush)하는 close를 호출합니다. QDataStream이 파일로 스트리밍을 완료하기 전에 삭제 될 수 있습니다. – TheDarkKnight

+0

예, 가능합니다. 고마워, 어쨌든! :) – SexyBeast