QFileDevice Class
QFileDevice 클래스는 열린 파일에서 데이터를 읽고 쓰는 데 필요한 인터페이스를 제공합니다. 더 보기...
| 헤더: | #include <QFileDevice> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| 상속: | QIODevice |
| 상속받는 항목: |
- 상속받은 멤버를 포함한 모든 멤버 목록
- QFileDevice는 입출력 및 네트워킹의 일부입니다.
참고: 이 클래스의 모든 함수는 재진입 가능합니다.
공개 유형
| enum | FileError { NoError, ReadError, WriteError, FatalError, ResourceError, …, CopyError } |
| enum | FileHandleFlag { AutoCloseHandle, DontCloseHandle } |
| flags | FileHandleFlags |
| enum | FileTime { FileAccessTime, FileBirthTime, FileMetadataChangeTime, FileModificationTime } |
| enum | MemoryMapFlag { NoOptions, MapPrivateOption } |
| flags | MemoryMapFlags |
| enum | Permission { ReadOwner, WriteOwner, ExeOwner, ReadUser, WriteUser, …, ExeOther } |
| flags | Permissions |
공개 함수
| virtual | ~QFileDevice() |
| QFileDevice::FileError | error() const |
| virtual QString | fileName() const |
| QDateTime | fileTime(QFileDevice::FileTime time) const |
| bool | flush() |
| int | handle() const |
| uchar * | map(qint64 offset, qint64 size, QFileDevice::MemoryMapFlags flags = NoOptions) |
| virtual QFileDevice::Permissions | permissions() const |
| virtual bool | resize(qint64 sz) |
| bool | setFileTime(const QDateTime &newDate, QFileDevice::FileTime fileTime) |
| virtual bool | setPermissions(QFileDevice::Permissions permissions) |
| bool | unmap(uchar *address) |
| void | unsetError() |
재구현된 공용 함수
| virtual bool | atEnd() const override |
| virtual void | close() override |
| virtual bool | isSequential() const override |
| virtual qint64 | pos() const override |
| virtual bool | seek(qint64 pos) override |
| virtual qint64 | size() const override |
재구현된 보호 함수
| virtual qint64 | readData(char *data, qint64 len) override |
| virtual qint64 | readLineData(char *data, qint64 maxlen) override |
| virtual qint64 | writeData(const char *data, qint64 len) override |
매크로
(since 6.8) | QT_NO_USE_NODISCARD_FILE_OPEN |
(since 6.8) | QT_USE_NODISCARD_FILE_OPEN |
상세 설명
QFileDevice는 텍스트 및 바이너리 파일과 리소스를 읽고 쓸 수 있는 I/O 장치의 기본 클래스입니다. QFile 가 주요 기능을 제공하는 반면, QFileDevice는 QFile 또는 QSaveFile 로 열린 파일에 대해 수행할 수 있는 모든 작업을 제공함으로써 QSaveFile 와 같은 다른 파일 장치와 기능을 공유하기 위한 기본 클래스 역할을 합니다.
멤버 유형 문서
enum QFileDevice::FileError
이 열거형은 error() 함수가 반환할 수 있는 오류들을 설명합니다.
| 상수 | 상수 | 설명 |
|---|---|---|
QFileDevice::NoError | 0 | 오류가 발생하지 않았습니다. |
QFileDevice::ReadError | 1 | 파일에서 읽을 때 오류가 발생했습니다. |
QFileDevice::WriteError | 2 | 파일에 쓰기 중에 오류가 발생했습니다. |
QFileDevice::FatalError | 3 | 치명적인 오류가 발생했습니다. |
QFileDevice::ResourceError | 4 | 리소스가 부족합니다(예: 열려 있는 파일이 너무 많음, 메모리 부족 등). |
QFileDevice::OpenError | 5 | 파일을 열 수 없습니다. |
QFileDevice::AbortError | 6 | 작업이 중단되었습니다. |
QFileDevice::TimeOutError | 7 | 타임아웃이 발생했습니다. |
QFileDevice::UnspecifiedError | 8 | 명시되지 않은 오류가 발생했습니다. |
QFileDevice::RemoveError | 9 | 파일을 제거할 수 없습니다. |
QFileDevice::RenameError | 10 | 파일 이름을 변경할 수 없습니다. |
QFileDevice::PositionError | 11 | 파일 내 위치를 변경할 수 없습니다. |
QFileDevice::ResizeError | 12 | 파일 크기를 조정할 수 없습니다. |
QFileDevice::PermissionsError | 13 | 파일에 액세스할 수 없습니다. |
QFileDevice::CopyError | 14 | 파일을 복사할 수 없습니다. |
enum QFileDevice::FileHandleFlag
flags QFileDevice::FileHandleFlags
이 열거형은 파일을 열 때, 일반적인 ` QIODevice`에는 적용되지 않고 파일에만 적용되는 추가 옵션을 지정하는 데 사용됩니다.
| 상수 | 상수명 | 상수값 |
|---|---|---|
QFileDevice::AutoCloseHandle | 0x0001 | open()에 전달된 파일 핸들은 close()에 의해 닫혀야 합니다. 기본 동작은 close가 파일을 플러시하기만 하고, 파일 핸들을 닫는 것은 애플리케이션의 책임입니다. 이름으로 파일을 열 때, Qt가 항상 파일 핸들을 소유하고 이를 닫아야 하므로 이 플래그는 무시됩니다. |
QFileDevice::DontCloseHandle | 0 | 명시적으로 닫지 않으면, QFile 객체가 소멸될 때 기본 파일 핸들은 열린 상태로 남게 됩니다. |
FileHandleFlags 유형은 QFlags<FileHandleFlag>에 대한 typedef입니다. 이 유형은 FileHandleFlag 값들의 OR 조합을 저장합니다.
enum QFileDevice::FileTime
이 열거형은 ` fileTime()` 및 ` setFileTime()` 함수에서 사용됩니다.
| 상수 | 상수명 | 설명 |
|---|---|---|
QFileDevice::FileAccessTime | 0 | 파일에 가장 최근에 액세스(예: 읽기 또는 쓰기)한 시점입니다. |
QFileDevice::FileBirthTime | 1 | 파일이 생성된 시점(UNIX에서는 지원되지 않을 수 있음). |
QFileDevice::FileMetadataChangeTime | 2 | 파일의 메타데이터가 마지막으로 변경된 시점. |
QFileDevice::FileModificationTime | 3 | 파일이 가장 최근에 수정된 시점. |
setFileTime(), fileTime(), QFileInfo::fileTime()도 참조하십시오 .
enum QFileDevice::MemoryMapFlag
flags QFileDevice::MemoryMapFlags
이 열거형은 ` map()` 함수에서 사용할 수 있는 특수 옵션을 설명합니다.
| 상수 | 상수명 | 상수값 |
|---|---|---|
QFileDevice::NoOptions | 0 | 옵션 없음. |
QFileDevice::MapPrivateOption | 0x0001 | 매핑된 메모리는 비공개로 설정되므로, 수정된 내용은 다른 프로세스에서 볼 수 없으며 디스크에 기록되지 않습니다. 메모리 매핑이 해제되면 이러한 수정 내용은 모두 손실됩니다. 매핑이 생성된 후 파일에 가해진 수정 사항이 매핑된 메모리를 통해 표시될지 여부는 명시되지 않았습니다. 이 열거형 값은 Qt 5.4에서 도입되었습니다. |
MemoryMapFlags 유형은 QFlags<MemoryMapFlag>에 대한 typedef입니다. 이 유형은 MemoryMapFlag 값들의 OR 조합을 저장합니다.
enum QFileDevice::Permission
flags QFileDevice::Permissions
이 열거형은 permission() 함수가 파일의 권한 및 소유권을 보고하는 데 사용됩니다. 여러 권한 및 소유권 값을 테스트하기 위해 이 값들을 논리 OR 연산으로 결합할 수 있습니다.
| 상수 | 값 | 설명 |
|---|---|---|
QFileDevice::ReadOwner | 0x4000 | 파일 소유자가 파일을 읽을 수 있습니다. |
QFileDevice::WriteOwner | 0x2000 | 파일 소유자는 파일에 쓰기 권한이 있습니다. |
QFileDevice::ExeOwner | 0x1000 | 파일 소유자는 파일을 실행할 수 있습니다. |
QFileDevice::ReadUser | 0x0400 | 사용자가 파일을 읽을 수 있습니다. |
QFileDevice::WriteUser | 0x0200 | 사용자는 파일에 쓰기 권한이 있습니다. |
QFileDevice::ExeUser | 0x0100 | 사용자는 파일을 실행할 수 있습니다. |
QFileDevice::ReadGroup | 0x0040 | 그룹은 파일을 읽을 수 있습니다. |
QFileDevice::WriteGroup | 0x0020 | 그룹은 파일에 쓰기 권한이 있습니다. |
QFileDevice::ExeGroup | 0x0010 | 그룹이 파일을 실행할 수 있습니다. |
QFileDevice::ReadOther | 0x0004 | 다른 사용자가 파일을 읽을 수 있습니다. |
QFileDevice::WriteOther | 0x0002 | 다른 사용자가 파일에 쓰기 권한이 있습니다. |
QFileDevice::ExeOther | 0x0001 | 다른 사용자가 파일을 실행할 수 있습니다. 경고: Qt가 지원하는 플랫폼 간의 차이때문에 ReadUser, WriteUser 및 ExeUser의 동작은 플랫폼에 따라 다릅니다. 유닉스에서는 파일 소유자의 권한이 반환되고, 윈도우에서는 현재 사용자의 권한이 반환됩니다. 이 동작은 향후 Qt 버전에서 변경될 수 있습니다. 참고: NTFS 파일시스템에서는 성능상의 이유로 소유권 및 권한 확인 기능이 기본적으로 비활성화되어 있습니다. 이 기능을 활성화하려면 다음 줄을 포함하십시오: |
qt_ntfs_permission_lookup 값을 1씩 늘리거나 줄이면 권한 확인이 켜지거나 꺼집니다.
qt_ntfs_permission_lookup++; // turn checking on
qt_ntfs_permission_lookup--; // turn it off again참고: 이 변수는 비원자적 전역변수이므로 , 메인 스레드 이외의 다른 스레드가 시작되기 전이나 메인 스레드 이외의 모든 스레드가 종료된 후에야 qt_ntfs_permission_lookup 를 증가시키거나 감소시키는 것이 안전합니다.
참고: Qt 6.6부터 qt_ntfs_permission_lookup 변수는 더 이상 사용되지 않습니다. 다음의 대체 방법을 사용해 주십시오.
권한 검사를 안전하고 쉽게 관리하는 방법은 RAII 클래스 ` QNtfsPermissionCheckGuard`를 사용하는 것입니다.
void complexFunction()
{
QNtfsPermissionCheckGuard permissionGuard; // check is enabled
// do complex things here that need permission check enabled
} // as the guard goes out of scope the check is disabled보다 세밀한 제어가 필요한 경우, 대신 다음 함수를 사용하여 권한을 관리할 수 있습니다:
qAreNtfsPermissionChecksEnabled(); // 상태 확인
qEnableNtfsPermissionChecks(); // turn checking on
qDisableNtfsPermissionChecks(); // turn it off againPermissions 유형은 QFlags<Permission>에 대한 typedef입니다. 이 유형은 Permission 값들의 OR 조합을 저장합니다.
멤버 함수 문서
[virtual noexcept] QFileDevice::~QFileDevice()
파일 디바이스를 삭제하고, 필요한 경우 해당 디바이스를 닫습니다.
[override virtual] bool QFileDevice::atEnd() const
QIODevice::atEnd() const를 재구현합니다.
파일 끝 부분에 도달한 경우 ` true `를 반환하고, 그렇지 않은 경우 `false`를 반환합니다.
유닉스에서 일반적인 빈 파일(예: /proc 에 있는 파일)의 경우, 파일 시스템이 해당 파일의 크기를 0으로 보고하므로 이 함수는 true 를 반환합니다. 따라서 이러한 파일에서 데이터를 읽을 때는 atEnd()에 의존해서는 안 되며, 더 이상 데이터를 읽을 수 없을 때까지 read()를 호출해야 합니다.
[override virtual] void QFileDevice::close()
QIODevice::close()을 재구현합니다.
QFileDevice::flush()를 호출하고 파일을 닫습니다. flush에서 발생하는 오류는 무시됩니다.
QIODevice::close()도 참조하십시오 .
QFileDevice::FileError QFileDevice::error() const
파일 오류 상태를 반환합니다.
I/O 장치 상태는 오류 코드를 반환합니다. 예를 들어, ` open()`가 ` false`를 반환하거나 읽기/쓰기 작업이 -1을 반환하는 경우, 이 함수를 호출하여 작업이 실패한 원인을 확인할 수 있습니다.
unsetError()도 참조하십시오 .
[virtual] QString QFileDevice::fileName() const
파일의 이름을 반환합니다. ` QFileDevice `의 기본 구현은 빈 문자열을 반환합니다.
QDateTime QFileDevice::fileTime(QFileDevice::FileTime time) const
time 에서 지정한 파일 시간을 반환합니다. 시간을 확인할 수 없는 경우 QDateTime() (유효하지 않은 날짜 및 시간)을 반환합니다.
setFileTime(), FileTime 및 QDateTime::isValid()도 참조하십시오 .
bool QFileDevice::flush()
버퍼에 저장된 데이터를 파일에 모두 기록합니다. 성공하면 ` true `를 반환하고, 그렇지 않으면 ` false`를 반환합니다.
int QFileDevice::handle() const
해당 파일의 파일 핸들을 반환합니다.
이는 작은 양의 정수이며, ` fdopen() ` 및 ` fcntl()`와 같은 C 라이브러리 함수와 함께 사용하기에 적합합니다. 소켓에 파일 디스크립터를 사용하는 시스템(즉, 유닉스 시스템, 윈도우는 제외)에서는 이 핸들을 ` QSocketNotifier `와 함께 사용할 수도 있습니다.
파일이 열려 있지 않거나 오류가 발생하면 handle()은 -1을 반환합니다.
QSocketNotifier도 참조하십시오 .
[override virtual] bool QFileDevice::isSequential() const
QIODevice::isSequential() const를 재구현합니다.
파일을 순차적으로만 조작할 수 있는 경우 ` true `를 반환하고, 그렇지 않은 경우 ` false`를 반환합니다.
대부분의 파일은 임의 접근을 지원하지만, 일부 특수 파일은 지원하지 않을 수도 있습니다.
QIODevice::isSequential()도 참조하십시오 .
uchar *QFileDevice::map(qint64 offset, qint64 size, QFileDevice::MemoryMapFlags flags = NoOptions)
파일의 ` size ` 바이트를 ` offset` 주소부터 시작하는 메모리에 매핑합니다. 매핑이 성공하려면 파일이 열려 있어야 하지만, 메모리 매핑이 완료된 후에도 파일이 계속 열려 있을 필요는 없습니다. ` QFile `가 소멸되거나 이 객체를 사용하여 새 파일이 열리면, 매핑 해제되지 않은 모든 매핑은 자동으로 해제됩니다.
매핑은 파일과 동일한 열기 모드(읽기 및/또는 쓰기)를 갖습니다. 단, ` MapPrivateOption`를 사용하는 경우는 예외이며, 이 경우 매핑된 메모리에 항상 쓰기가 가능합니다.
모든 매핑 옵션은 flags 을 통해 전달할 수 있습니다.
오류가 발생하면 메모리에 대한 포인터를 반환하고, 오류가 없는 경우 ` nullptr `를 반환합니다.
unmap()도 참조하십시오 .
[virtual] QFileDevice::Permissions QFileDevice::permissions() const
해당 파일에 대한 QFile::Permission의 모든 권한을 OR 연산으로 결합한 결과를 반환합니다.
setPermissions()도 참조하십시오 .
[override virtual] qint64 QFileDevice::pos() const
QIODevice::pos() const를 재구현합니다.
[override virtual protected] qint64 QFileDevice::readData(char *data, qint64 len)
QIODevice::readData(char *data, qint64 maxSize)를 재구현합니다.
[override virtual protected] qint64 QFileDevice::readLineData(char *data, qint64 maxlen)
QIODevice::readLineData(char *data, qint64 maxSize)를 재구현합니다.
[virtual] bool QFileDevice::resize(qint64 sz)
sz 의 파일 크기(바이트 단위)를 설정합니다. 크기 조정이 성공하면 true 를 반환하고, 그렇지 않으면 false를 반환합니다. sz 가 현재 파일 크기보다 크면 new_bytes는 0으로 설정되며, sz 가 더 작으면 파일은 단순히 잘립니다.
경고: 파일이 존재하지 않으면이 함수가 실패할 수 있습니다.
size()도 참조하십시오 .
[override virtual] bool QFileDevice::seek(qint64 pos)
QIODevice::seek(qint64 pos)를 재구현합니다.
임의 접근 장치의 경우, 이 함수는 현재 위치를 pos 로 설정하며, 성공하면 true를, 오류가 발생하면 false를 반환합니다. 순차적 장치의 경우, 기본 동작은 아무 작업도 수행하지 않고 false를 반환하는 것입니다.
파일 끝을 넘어서는 탐색: 위치가 파일 끝을 넘어설 경우, seek()은 파일을 즉시 확장하지 않습니다. 이 위치에서 쓰기 작업이 수행되면 파일이 확장됩니다. 이전 파일 끝과 새로 쓰인 데이터 사이의 파일 내용은 정의되지 않으며, 플랫폼과 파일 시스템에 따라 다릅니다.
bool QFileDevice::setFileTime(const QDateTime &newDate, QFileDevice::FileTime fileTime)
fileTime 로 지정된 파일 시간을 newDate 로 설정하며, 성공하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
참고: 이 함수를 사용하려면파일이 열려 있어야 합니다.
fileTime() 및 FileTime도 참조하십시오 .
[virtual] bool QFileDevice::setPermissions(QFileDevice::Permissions permissions)
지정된 permissions 으로 파일의 권한을 설정합니다. 성공하면 true 를 반환하고, 권한을 수정할 수 없는 경우 false 를 반환합니다.
경고: 이 함수는 ACL(액세스 제어 목록)을 조작하지 않으므로, 그 효과가 제한될 수 있습니다.
참조: permissions().
[override virtual] qint64 QFileDevice::size() const
QIODevice::size() const를 재구현합니다.
파일의 크기를 반환합니다.
Unix의 일반적인 빈 파일(예: /proc 에 있는 파일)의 경우, 이 함수는 0을 반환합니다. 이러한 파일의 내용은 사용자가 read()를 호출할 때 필요에 따라 생성됩니다.
bool QFileDevice::unmap(uchar *address)
address 의 메모리 매핑을 해제합니다.
언맵이 성공하면 true 를 반환하고, 그렇지 않으면 false를 반환합니다.
map()도 참조하십시오 .
void QFileDevice::unsetError()
파일의 오류를 ` QFileDevice::NoError`로 설정합니다.
error()도 참조하십시오 .
[override virtual protected] qint64 QFileDevice::writeData(const char *data, qint64 len)
QIODevice::writeData(const char *data, qint64 maxSize)를 재구현합니다.
매크로 설명서
파일 관련 I/O 클래스(예: QFile, QSaveFile, QTemporaryFile)에는 해당 클래스가 처리하는 파일을 여는 open() 메서드가 있습니다. 파일에서 데이터를 읽거나 쓰기 작업을 진행하기 전에 open() 호출의 반환 값을 확인하는 것이 중요합니다.
이러한 이유로, Qt 6.8부터 open() 의 일부 오버로드에 [[nodiscard]] 속성이 지정되었습니다. 이 변경 사항으로 인해 기존 코드베이스에서 경고가 발생할 수 있으므로, 사용자 코드는 특정 매크로를 정의하여 해당 속성의 적용 여부를 선택할 수 있습니다:
QT_USE_NODISCARD_FILE_OPEN매크로가 정의되어 있으면,open()의 오버로드들은[[nodiscard]]로 표시됩니다.QT_NO_USE_NODISCARD_FILE_OPEN매크로가 정의된 경우,open()의 오버로드들은[[nodiscard]]로 표시 되지 않습니다.- 두 매크로 모두 정의되지 않은 경우, Qt 6.9까지(Qt 6.9 포함)의 기본값은 해당 속성이 없는 것입니다. Qt 6.10부터는 이 속성이 자동으로 적용됩니다.
- 두 매크로가 모두 정의된 경우, 프로그램은 유효하지 않은 형식이 됩니다.
이 매크로들은 Qt 6.8에서 도입되었습니다.
© 2026 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.