QSaveFile Class

QSaveFile 클래스는 파일에 안전하게 쓰기 위한 인터페이스를 제공합니다. 더 보기...

Header: #include <QSaveFile>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
상속합니다: QFileDevice

참고: 이 클래스의 모든 함수는 재상속됩니다.

공용 함수

QSaveFile(QObject *parent = nullptr)
QSaveFile(const QString &name)
QSaveFile(const QString &name, QObject *parent)
virtual ~QSaveFile()
void cancelWriting()
bool commit()
bool directWriteFallback() const
void setDirectWriteFallback(bool enabled)
void setFileName(const QString &name)

재구현된 공용 함수

virtual QString fileName() const override
virtual bool open(QIODeviceBase::OpenMode mode) override

재구현된 보호 함수

virtual qint64 writeData(const char *data, qint64 len) override

상세 설명

QSaveFile은 쓰기 작업이 실패해도 기존 데이터를 잃지 않고 텍스트 및 바이너리 파일을 쓰기 위한 입출력 장치입니다.

쓰는 동안 내용은 임시 파일에 쓰여지고 오류가 발생하지 않으면 commit()가 최종 파일로 이동합니다. 이렇게 하면 쓰기 중 오류가 발생해도 최종 파일의 데이터가 손실되지 않으며, 부분적으로만 쓰여진 파일이 최종 위치에 존재하지 않습니다. 전체 문서를 디스크에 저장할 때는 항상 QSaveFile을 사용하세요.

QSaveFile은 write()가 모든 바이트를 쓸 수 없는 전체 파티션 상황과 같은 쓰기 중 오류를 자동으로 감지합니다. 오류가 발생한 것을 기억하고 commit()에 있는 임시 파일을 삭제합니다.

QFile 에서와 마찬가지로 파일은 open()로 열립니다. 데이터는 일반적으로 QDataStream 또는 QTextStream 을 사용하여 읽고 쓰지만 write()을 직접 호출할 수도 있습니다.

QFile 와 달리 close() 호출은 허용되지 않습니다. commit()가 이를 대체합니다. commit ()가 호출되지 않고 QSaveFile 인스턴스가 파괴되면 임시 파일이 삭제됩니다.

애플리케이션 오류로 인해 저장을 중단하려면 cancelWriting()를 호출하면 나중에 commit()를 호출해도 저장되지 않습니다.

QTextStream, QDataStream, QFileInfo, QDir, QFile, QTemporaryFile참조하세요 .

멤버 함수 문서

[explicit] QSaveFile::QSaveFile(QObject *parent = nullptr)

주어진 parent 으로 새 파일 객체를 생성합니다. open () 앞에 setFileName()를 호출해야 합니다.

[explicit] QSaveFile::QSaveFile(const QString &name)

주어진 name 으로 파일을 나타내는 새 파일 객체를 생성합니다.

[explicit] QSaveFile::QSaveFile(const QString &name, QObject *parent)

지정된 name 을 가진 파일을 나타내기 위해 지정된 parent 으로 새 파일 객체를 생성합니다.

[virtual noexcept] QSaveFile::~QSaveFile()

commit()가 호출되지 않은 경우 파일 객체를 삭제하여 저장된 내용을 삭제합니다.

void QSaveFile::cancelWriting()

새 파일 쓰기를 취소합니다.

애플리케이션이 저장하는 동안 마음이 바뀌면 취소 쓰기()를 호출하여 오류 코드를 설정하여 commit()가 임시 파일을 삭제하도록 할 수 있습니다.

또는 commit()를 호출하지 않도록 할 수도 있습니다.

이 메서드를 호출한 후에도 추가 쓰기 작업이 가능하지만 어떤 작업도 아무런 영향을 미치지 않으며 작성된 파일은 삭제됩니다.

이 메서드는 직접 쓰기 폴백을 사용할 때는 효과가 없습니다. 읽기 전용 디렉터리에 있는 기존 파일을 덮어쓰는 경우: 임시 파일을 만들 수 없으므로 기존 파일을 덮어쓸 수 없고 취소Writing()으로는 아무 것도 할 수 없으며 기존 파일의 내용이 손실됩니다.

commit()도 참조하세요 .

bool QSaveFile::commit()

이전의 모든 쓰기가 성공하면 변경 내용을 디스크에 커밋합니다.

저장 작업이 끝날 때 반드시 이 함수를 호출해야 하며, 그렇지 않으면 파일이 삭제됩니다.

쓰기 중에 오류가 발생하면 임시 파일을 삭제하고 false 을 반환합니다. 그렇지 않으면 최종 fileName 로 이름을 바꾸고 성공하면 true 을 반환합니다. 마지막으로 장치를 닫습니다.

cancelWriting()도 참조하세요 .

bool QSaveFile::directWriteFallback() const

읽기 전용 디렉터리에 파일을 저장하는 대체 솔루션이 활성화된 경우 true 을 반환합니다.

setDirectWriteFallback()도 참조하세요 .

[override virtual] QString QSaveFile::fileName() const

재구현합니다: QFileDevice::fileName() const.

setFileName() 또는 QSaveFile 생성자에 의해 설정된 이름을 반환합니다.

setFileName()도 참조하세요 .

[override virtual] bool QSaveFile::open(QIODeviceBase::OpenMode mode)

다시 구현합니다: QIODevice::open(QIODeviceBase::OpenMode 모드).

mode 플래그를 사용하여 파일을 엽니다. 성공하면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다.

중요: mode 의 플래그에는 QIODeviceBase::WriteOnly 이 포함되어야 합니다. 사용할 수 있는 다른 일반적인 플래그는 TextUnbuffered 입니다. 현재 지원되지 않는 플래그는 ReadOnly (따라서 ReadWrite), Append, NewOnlyExistingOnly 이며, 런타임 경고를 생성합니다.

setFileName() 및 QT_USE_NODISCARD_FILE_OPEN도 참조하세요 .

void QSaveFile::setDirectWriteFallback(bool enabled)

필요한 경우 기존 파일에 덮어쓰기를 허용합니다.

QSaveFile 최종 파일과 같은 디렉터리에 임시 파일을 만들고 이름을 원자적으로 바꿉니다. 그러나 디렉터리 권한이 새 파일 생성을 허용하지 않는 경우에는 이 기능을 사용할 수 없습니다. 원자성 보장을 유지하기 위해 open()는 임시 파일을 만들 수 없는 경우 실패합니다.

권한이 제한된 디렉터리에서 쓰기 권한이 있는 사용자가 파일을 편집할 수 있도록 하려면 enabled 을 true로 설정하여 setDirectWriteFallback()을 호출하면 다음 open() 호출은 임시 파일을 사용하지 않고 기존 파일을 직접 열고 그 안에 쓰는 것으로 폴백됩니다. 여기에는 원자성이 보장되지 않으므로 애플리케이션이 충돌하거나 정전이 발생하면 디스크에 파일이 부분적으로 기록될 수 있습니다. 또한 이러한 경우 cancelWriting()는 아무런 효과가 없습니다.

일반적으로 사용자가 편집한 문서를 저장하려면 setDirectWriteFallback(true)을 호출하고, 애플리케이션 내부 파일(구성 파일, 데이터 파일 등)을 저장하려면 원자성을 보장하는 기본 설정을 유지합니다.

directWriteFallback()도 참조하세요 .

void QSaveFile::setFileName(const QString &name)

파일의 name 을 설정합니다. 이름에는 경로, 상대 경로 또는 절대 경로를 사용할 수 없습니다.

QFile::setFileName() 및 fileName()도 참조하세요 .

[override virtual protected] qint64 QSaveFile::writeData(const char *data, qint64 len)

재구현합니다: QFileDevice::writeData(const char *data, qint64 len).

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.