이 페이지에서

QFile Class

QFile 클래스는 파일에서 데이터를 읽고 쓰는 데 필요한 인터페이스를 제공합니다. 더 보기...

헤더: #include <QFile>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
상속: QFileDevice
상속 대상:

QTemporaryFile

참고: 이 클래스의 모든 함수는 재진입 가능합니다.

공개 함수

QFile()
QFile(QObject *parent)
QFile(const QString &name)
(since 6.0) QFile(const std::filesystem::path &name)
QFile(const QString &name, QObject *parent)
(since 6.0) QFile(const std::filesystem::path &name, QObject *parent)
virtual ~QFile()
bool copy(const QString &newName, std::optional<QFileDevice::Permissions> perm = std::nullopt)
(since 6.0) bool copy(const std::filesystem::path &newName)
bool exists() const
(since 6.0) std::filesystem::path filesystemFileName() const
(since 6.3) std::filesystem::path filesystemSymLinkTarget() const
bool link(const QString &linkName)
(since 6.0) bool link(const std::filesystem::path &newName)
bool moveToTrash()
(since 6.3) bool open(QIODeviceBase::OpenMode mode, QFileDevice::Permissions permissions)
bool open(FILE *fh, QIODeviceBase::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)
bool open(int fd, QIODeviceBase::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)
bool remove()
bool rename(const QString &newName)
(since 6.0) bool rename(const std::filesystem::path &newName)
void setFileName(const QString &name)
(since 6.0) void setFileName(const std::filesystem::path &name)
QString symLinkTarget() const

재구현된 공용 함수

virtual QString fileName() const override
virtual bool open(QIODeviceBase::OpenMode mode) override
virtual QFileDevice::Permissions permissions() const override
virtual bool resize(qint64 sz) override
virtual bool setPermissions(QFileDevice::Permissions permissions) override
virtual qint64 size() const override

정적 공용 멤버

bool copy(const QString &fileName, const QString &newName, std::optional<QFileDevice::Permissions> perm = std::nullopt)
QString decodeName(const QByteArray &localFileName)
QString decodeName(const char *localFileName)
QByteArray encodeName(const QString &fileName)
bool exists(const QString &fileName)
(since 6.3) std::filesystem::path filesystemSymLinkTarget(const std::filesystem::path &fileName)
bool link(const QString &fileName, const QString &linkName)
bool moveToTrash(const QString &fileName, QString *pathInTrash = nullptr)
QFileDevice::Permissions permissions(const QString &fileName)
(since 6.0) QFileDevice::Permissions permissions(const std::filesystem::path &filename)
bool remove(const QString &fileName)
bool rename(const QString &oldName, const QString &newName)
bool resize(const QString &fileName, qint64 sz)
bool setPermissions(const QString &fileName, QFileDevice::Permissions permissions)
(since 6.0) bool setPermissions(const std::filesystem::path &filename, QFileDevice::Permissions permissionSpec)
(since 6.9) bool supportsMoveToTrash()
QString symLinkTarget(const QString &fileName)

상세 설명

QFile은 텍스트 및 바이너리 파일과 리소스를 읽고 쓰는 데 사용되는 I/O 장치입니다. QFile은 단독으로 사용할 수도 있지만, 더 편리하게는 QTextStream 또는 QDataStream 와 함께 사용할 수 있습니다.

파일 이름은 일반적으로 생성자에 전달되지만, setFileName()를 사용하여 언제든지 설정할 수 있습니다. QFile은 운영 체제에 관계없이 파일 구분자로 '/'를 사용합니다. 다른 구분자(예: '\')의 사용은 지원되지 않습니다.

exists()를 사용하여 파일의 존재 여부를 확인할 수 있으며, remove()를 사용하여 파일을 삭제할 수 있습니다. (더 고급 파일 시스템 관련 작업은 QFileInfo 및 QDir 에서 제공됩니다.)

파일은 open()로 열고, close()로 닫으며, flush()로 플러시합니다. 데이터는 일반적으로 QDataStream 또는 QTextStream 를 사용하여 읽고 쓰지만, QIODevice 에서 상속받은 함수인 read(), readLine(), readAll(), write()를 호출할 수도 있습니다. QFile은 또한 한 번에 한 문자씩 처리하는 getChar(), putChar(), ungetChar()를 상속받습니다.

파일의 크기는 size() 함수를 통해 반환됩니다. pos() 함수를 사용하여 현재 파일 위치를 확인하거나, seek() 함수를 사용하여 새로운 파일 위치로 이동할 수 있습니다. 파일의 끝까지 도달한 경우, atEnd() 함수는 true 를 반환합니다.

파일을 직접 읽기

다음 예제는 텍스트 파일을 한 줄씩 읽습니다:

    QFile file("in.txt");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
        return;

    while (!file.atEnd()) {
        QByteArray line = file.readLine();
        process_line(line);
    }

Text open()에 전달된 ` ` 플래그는 Qt가 Windows 스타일의 줄 끝 표시자(" ")를 C++ 스타일의 줄 끝 표시자(" ")로 변환하도록 지시합니다. 기본적으로 QFile은 파일을 바이너리 모드로 간주하므로, 파일에 저장된 바이트에 대해 어떠한 변환도 수행하지 않습니다.\r\n\n

스트림을 사용하여 파일 읽기

다음 예제는 ` QTextStream `를 사용하여 텍스트 파일을 한 줄씩 읽습니다:

    QFile file("in.txt");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
        return;

    QTextStream in(&file);
    while (!in.atEnd()) {
        QString line = in.readLine();
        process_line(line);
    }

QTextStream 디스크에 저장된 8비트 데이터를 16비트 유니코드 QString 로 변환해 줍니다. 기본적으로 파일은 UTF-8로 인코딩된 것으로 가정합니다. 이는 QTextStream::setEncoding()를 사용하여 변경할 수 있습니다.

텍스트를 쓰기 위해서는 연산자 <<()를 사용할 수 있습니다. 이 연산자는 왼쪽에 QTextStream 를, 오른쪽에 다양한 데이터 유형( QString 포함)을 받는 형태로 오버로드되어 있습니다:

    QFile file("out.txt");
    if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
        return;

    QTextStream out(&file);
    out << "The magic number is: " << 49 << "\n";

QDataStream 와 마찬가지로, operator<<()를 사용하여 데이터를 쓰고 operator>>()를 사용하여 다시 읽을 수 있습니다. 자세한 내용은 클래스 문서를 참조하십시오.

신호

QTcpSocket 와 같은 다른 QIODevice 구현체와 달리, QFile은 aboutToClose(), bytesWritten() 또는 readyRead() 신호를 발생시키지 않습니다. 이러한 구현상의 특성으로 인해 QFile은 유닉스 플랫폼의 디바이스 파일과 같은 특정 유형의 파일을 읽고 쓰는 데 적합하지 않습니다.

플랫폼별 문제

I/O와 관련된 Qt API는 파일 경로를 나타내기 위해 UTF-16 기반 QString을 사용합니다. 그러나 표준 C++ API(<cstdio> 또는 <iostream>)나 플랫폼별 API는 종종 8비트 인코딩된 경로를 필요로 합니다. encodeName() 및 decodeName()을 사용하여 두 표현 방식 간에 변환할 수 있습니다.

유닉스에서는 size()가 항상 0을 반환하는 일부 특수 시스템 파일(예: /proc)이 있지만, 이러한 파일에서도 여전히 더 많은 데이터를 읽을 수 있는 경우가 있습니다. 이 데이터는 read()를 호출했을 때 직접적으로 생성됩니다. 그러나 이 경우, atEnd()을 사용하여 읽을 데이터가 더 남아 있는지 확인할 수는 없습니다( atEnd()는 크기가 0이라고 표시된 파일에서도 true를 반환하기 때문입니다). 대신, readAll()를 호출하거나, 더 이상 데이터를 읽을 수 없을 때까지 read() 또는 readLine()를 반복적으로 호출해야 합니다. 다음 예제는 QTextStream 를 사용하여 /proc/modules 를 한 줄씩 읽습니다:

    QFile file("/proc/modules");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
        return;

    QTextStream in(&file);
    QString line = in.readLine();
    while (!line.isNull()) {
        process_line(line);
        line = in.readLine();
    }

Android에서는 콘텐츠 URI를 다룰 때 다음과 같은 제한 사항이 적용됩니다:

보안 고려 사항

Windows 경로 정규화

파일 및 디렉터리 경로를 처리하는 Qt API는 네이티브 Windows API와 다른 방식으로 정규화 및 캐노니컬화를 수행합니다:

  • 끝에 붙은 점 및/또는 공백은 제거되지 않습니다.
  • 8.3 형식 짧은 이름은 확장되지 않습니다.
  • \\?\ 및 \\?\UNC\ 접두사는 항상 제거됩니다.

이러한 차이점들로 인해 문자열 비교나 패턴 매칭에 기반한 보안 검사를 우회할 가능성이 생깁니다. 예를 들어, 아래 코드는 두 비교 모두에서 false 을 반환하지만, 이 경로를 QFile에 전달하면 Program Files 내의 myapp.exe 이 성공적으로 열립니다.

const QString path = u"C:\\PROGRA~1\\MyApp\\myapp.exe."_s; // 끝의 점에 유의
QFileInfo fi(path);
qDebug() << fi.canonicalFilePath().contains("Program Files"_L1); // false
qDebug() << (fi.suffix() == "exe"_L1); // false
QFile f(path);
f.open(QIODevice::WriteOnly); // true

파일 권한

파일 권한은 유닉스 계열 시스템과 Windows에서 다르게 처리됩니다. 유닉스 계열 시스템의 ' writable ' 권한이 설정되지 않은 디렉터리에서는 파일을 생성할 수 없습니다. Windows에서는 항상 그런 것은 아닙니다. 예를 들어, '내 문서' 디렉터리는 일반적으로 쓰기 권한이 없지만, 그 안에서도 파일을 생성할 수 있습니다.

Qt가 파일 권한을 처리하는 방식은 제한적이며, 이는 특히 QFile::setPermissions() 함수에 영향을 미칩니다. Windows에서 Qt는 레거시 읽기 전용 플래그만 설정하며, 이는 Write* 플래그가 하나도 전달되지 않은 경우에만 적용됩니다. Qt는 액세스 제어 목록(ACL)을 조작하지 않으므로, 이 함수는 NTFS 볼륨에서는 거의 쓸모가 없습니다. 다만 VFAT 파일 시스템을 사용하는 USB 메모리의 경우에는 여전히 유용할 수 있습니다. POSIX ACL도 조작되지 않습니다.

QTextStream, QDataStream, QFileInfo, QDir 및 《Qt 리소스 시스템》도 참조하십시오 .

멤버 함수 문서

QFile::QFile()

QFile 객체를 생성합니다.

[explicit] QFile::QFile(QObject *parent)

지정된 ` parent`를 사용하여 새로운 파일 객체를 생성합니다.

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

지정된 ` name`를 가진 파일을 나타내는 새로운 파일 객체를 생성합니다.

참고: Qt 6.8 이하버전에서는 하위 호환성을 위해 이 생성자가 암시적으로 호출됩니다. Qt 6.9부터는 이 생성자가 무조건 ` explicit`로 호출됩니다. 사용자는 Qt 헤더를 포함하기 전에 ` QT_EXPLICIT_QFILE_CONSTRUCTION_FROM_PATH ` 매크로를 정의함으로써, 이전 버전의 Qt에서도 이 생성자가 ` explicit `로 호출되도록 강제할 수 있습니다.

[explicit, since 6.0] QFile::QFile(const std::filesystem::path &name)

지정된 ` name`을 가진 파일을 나타내는 새로운 파일 객체를 생성합니다.

참고: Qt 6.8까지의버전에서는 하위 호환성을 위해 이 생성자가 암시적으로 호출됩니다. Qt 6.9부터는 이 생성자가 무조건 ` explicit`로 호출됩니다. 사용자는 Qt 헤더를 포함하기 전에 ` QT_EXPLICIT_QFILE_CONSTRUCTION_FROM_PATH ` 매크로를 정의함으로써, 이전 버전의 Qt에서도 이 생성자가 ` explicit `로 호출되도록 강제할 수 있습니다.

이 함수는 Qt 6.0에서 도입되었습니다.

QFile::QFile(const QString &name, QObject *parent)

지정된 ` parent `를 사용하여, 지정된 ` name`를 가진 파일을 나타내는 새로운 파일 객체를 생성합니다.

[since 6.0] QFile::QFile(const std::filesystem::path &name, QObject *parent)

지정된 ` parent `을 사용하여, 지정된 ` name`을 나타내는 새로운 파일 객체를 생성합니다.

이 함수는 Qt 6.0에서 도입되었습니다.

[virtual noexcept] QFile::~QFile()

파일 객체를 삭제하고, 필요한 경우 파일을 닫습니다.

bool QFile::copy(const QString &newName, std::optional<QFileDevice::Permissions> perm = std::nullopt)

fileName()라는 이름의 파일을 newName 로 복사합니다.

이 파일은 복사되기 전에 닫힙니다.

Qt 6.12부터는 호출 시 perm 에 대한 권한을 지정할 수 있습니다. 이 매개변수가 전달되지 않으면 원본 파일의 권한이 복사됩니다. 새 파일은 지정된 권한으로 생성됩니다.

복사된 파일이 심볼릭 링크(symlink)인 경우, 링크 자체가 아닌 링크가 가리키는 파일이 복사됩니다. 권한을 제외하고는 다른 파일 메타데이터는 복사되지 않습니다.

성공하면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.

newName 라는 이름의 파일이 이미 존재하는 경우, copy()는 false 를 반환합니다. 이는 QFile 가 해당 파일을 덮어쓰지 않음을 의미합니다. 그러나 이 작업은 원자적이지 않습니다. 확인과 복사 사이에 다른 프로세스가 newName 로 시작하는 파일을 생성할 가능성이 있습니다. 이 경우 해당 파일은 덮어쓰게 됩니다.

참고: Android에서는 content 스키마 URI에 대해 이 작업이 아직 지원되지 않습니다.

setFileName()도 참조하십시오 .

[since 6.0] bool QFile::copy(const std::filesystem::path &newName)

이 함수는 오버로드된 함수입니다.

이 함수는 Qt 6.0에서 도입되었습니다.

[static] bool QFile::copy(const QString &fileName, const QString &newName, std::optional<QFileDevice::Permissions> perm = std::nullopt)

fileName 라는 파일을 newName 로 복사합니다.

Qt 6.12부터는 호출 시 perm 의 권한을 지정할 수 있습니다. 권한이 전달되지 않으면 원본 파일의 권한이 복사됩니다. 새 파일은 지정된 권한으로 생성됩니다.

복사된 파일이 심볼릭 링크(symlink)인 경우, 링크 자체가 아닌 링크가 가리키는 파일이 복사됩니다. 권한을 제외하고는 다른 파일 메타데이터는 복사되지 않습니다.

성공하면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.

newName 라는 이름의 파일이 이미 존재하는 경우, copy()는 false 를 반환합니다. 이는 QFile 가 해당 파일을 덮어쓰지 않음을 의미합니다. 그러나 이 작업은 원자적이지 않습니다. 확인과 복사 사이에 다른 프로세스가 newName 라는 파일을 생성할 가능성이 있습니다. 이 경우 해당 파일이 덮어쓰게 됩니다.

참고: Android에서는 content 형식의 URI에 대해 이 작업이 아직 지원되지 않습니다.

이 함수는 오버로드된 함수입니다.

rename()도 참조하십시오 .

[static] QString QFile::decodeName(const QByteArray &localFileName)

이 코드는 ` localFileName`를 사용하여 ` QFile::encodeName()`의 역방향 작업을 수행합니다.

encodeName()도 참조하십시오 .

[static] QString QFile::decodeName(const char *localFileName)

지정된 ` localFileName`의 유니코드 버전을 반환합니다. 자세한 내용은 ` encodeName()`을 참조하십시오.

이 함수는 오버로드된 함수입니다.

[static] QByteArray QFile::encodeName(const QString &fileName)

fileName 를 네이티브 API에서 사용할 수 있는 8비트 인코딩으로 변환합니다. Windows에서는 활성 Windows(ANSI) 코드 페이지의 인코딩이 사용됩니다. 다른 플랫폼에서는 UTF-8이 사용되며, macOS의 경우 분해된 형태(NFD)로 변환됩니다.

decodeName()도 참조하십시오 .

[static] bool QFile::exists(const QString &fileName)

fileName 로 지정된 파일이 존재하면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.

참고: fileName 가 존재하지 않는 파일을 가리키는 심볼릭 링크인경우 , false가 반환됩니다.

bool QFile::exists() const

fileName()로 지정된 파일이 존재하면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.

이 함수는 오버로드된 함수입니다.

fileName() 및 setFileName()도 참조하십시오 .

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

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

setFileName(), rename() 또는 QFile 생성자에 의해 설정된 파일 이름을 반환합니다.

setFileName(), rename() 및 QFileInfo::fileName()도 참조하십시오 .

[since 6.0] std::filesystem::path QFile::filesystemFileName() const

fileName()을 std::filesystem::path 로 반환합니다.

이 함수는 Qt 6.0에서 도입되었습니다.

[since 6.3] std::filesystem::path QFile::filesystemSymLinkTarget() const

symLinkTarget()을 std::filesystem::path 로 반환합니다.

이 함수는 Qt 6.3에서 도입되었습니다.

[static, since 6.3] std::filesystem::path QFile::filesystemSymLinkTarget(const std::filesystem::path &fileName)

symLinkTarget()를 fileName 의 std::filesystem::path 로 반환합니다.

이 함수는 Qt 6.3에서 도입되었습니다.

linkName 라는 이름의 링크를 생성하며, 이 링크는 현재 fileName()로 지정된 파일을 가리킵니다. 링크의 형태는 기본 파일 시스템에 따라 달라집니다(Windows에서는 바로 가기, Unix에서는 심볼릭 링크 등). 성공하면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.

이 함수는 파일 시스템에 이미 존재하는 개체를 덮어쓰지 않습니다. 이 경우 link() 는 false를 반환하고, error()가 RenameError 를 반환하도록 설정합니다.

참고: Windows에서 유효한 링크를생성하려면 linkName 의 파일 확장자는 .lnk 이어야 합니다.

참조: setFileName()도 참조하십시오 .

이 함수는 오버로드된 함수입니다.

이 함수는 Qt 6.0에서 도입되었습니다.

linkName 라는 이름의 링크를 생성하여 fileName 파일을 가리키게 합니다. 링크의 형태는 기본이 되는 파일 시스템에 따라 달라집니다(Windows에서는 바로 가기, Unix에서는 심볼릭 링크 등). 성공하면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.

이 함수는 오버로드된 함수입니다.

link()도 참조하십시오 .

bool QFile::moveToTrash()

fileName()로 지정된 파일을 휴지통으로 이동합니다. 성공하면 true 를 반환하고, fileName()를 휴지통 내에서 해당 파일을 찾을 수 있는 경로로 설정합니다. 그렇지 않으면 false 를 반환합니다.

이 함수의 실행 시간은 휴지통으로 이동되는 파일의 크기와 무관합니다. 이 함수가 디렉터리에 대해 호출되는 경우, 실행 시간은 휴지통으로 이동되는 파일의 수에 비례할 수 있습니다. 현재 fileName()가 심볼릭 링크를 가리키는 경우, 이 함수는 링크의 대상이 아닌 링크 자체를 휴지통으로 이동시키며, 이로 인해 링크가 깨질 수 있습니다.

이 함수는 Windows 및 macOS 운영 체제에서 휴지통 이동을 수행하기 위해 해당 운영 체제의 API를 사용합니다. 그 외의 환경(Unix 시스템)에서는 이 함수가 FreeDesktop.org 휴지통 사양 버전 1.0을 구현합니다.

참고: FreeDesktop.org 휴지통 구현을 사용할경우 , 파일 이름 변경 및 하드 링크를 통해 파일을 휴지통 위치로 이동할 수 없는 경우 이 함수는 실패합니다. 이러한 상황은 휴지통으로 이동하려는 파일이 현재 사용자가 .Trash 디렉터리를 생성할 권한이 없는 볼륨(마운트 지점)에 위치해 있거나, 일부 특이한 파일 시스템 유형 또는 구성(예: 그 자체가 마운트 지점이 아닌 하위 볼륨)에서 발생합니다.

참고: 시스템 API가 휴지통 내 파일의 위치를 보고하지 않는시스템에서는 , 파일이 이동되면 fileName()이 빈 문자열로 설정됩니다. 휴지통 기능이 없는 시스템에서는 이 함수가 항상 false 를 반환합니다( supportsMoveToTrash() 참조).

supportsMoveToTrash(), remove(), QDir::remove()도 참조하십시오 .

[static] bool QFile::moveToTrash(const QString &fileName, QString *pathInTrash = nullptr)

fileName 로 지정된 파일을 휴지통으로 이동합니다. 성공하면 true 를 반환하고, pathInTrash (지정된 경우)를 휴지통 내에서 해당 파일을 찾을 수 있는 경로로 설정합니다. 그렇지 않으면 false 를 반환합니다.

이 함수의 실행 시간은 휴지통으로 이동되는 파일의 크기와 무관합니다. 이 함수가 디렉터리에 대해 호출되는 경우, 실행 시간은 휴지통으로 이동되는 파일의 수에 비례할 수 있습니다. 현재 fileName()가 심볼릭 링크를 가리키는 경우, 이 함수는 링크의 대상이 아닌 해당 링크를 휴지통으로 이동시키며, 이로 인해 링크가 끊어질 수 있습니다.

이 함수는 Windows 및 macOS 운영 체제에서 휴지통 이동을 수행하기 위해 해당 운영 체제의 API를 사용합니다. 그 외의 환경(Unix 시스템)에서는 이 함수가 FreeDesktop.org 휴지통 사양 버전 1.0을 구현합니다.

참고: FreeDesktop.org 휴지통 구현을 사용할때 , 파일 이름 변경 및 하드 링크를 통해 파일을 휴지통 위치로 이동할 수 없는 경우 이 함수는 실패합니다. 이러한 상황은 휴지통으로 이동하려는 파일이 현재 사용자가 ` .Trash ` 디렉터리를 생성할 권한이 없는 볼륨(마운트 지점)에 위치해 있거나, 일부 특이한 파일 시스템 유형 또는 구성(예: 자체적으로 마운트 지점이 아닌 하위 볼륨)에서 발생합니다.

참고: 시스템 API가 휴지통에 있는 파일의 경로를 반환하지 않는시스템에서는 , 파일이 이동되면 pathInTrash 가 빈 문자열로 설정됩니다. 휴지통 기능이 없는 시스템에서는 이 함수가 항상 false를 반환합니다.

이 함수는 오버로드된 함수입니다.

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

QIODevice::open(QIODeviceBase::OpenMode mode)를 재구현합니다.

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

mode 에 대한 플래그에는 QIODeviceBase::ReadOnly, WriteOnly 또는 ReadWrite 이 포함되어야 합니다. 또한 Text 및 Unbuffered 과 같은 추가 플래그를 포함할 수도 있습니다.

참고: WriteOnly 또는 ReadWrite 모드에서 , 해당 파일이 아직 존재하지 않는 경우 이 함수는 파일을 열기 전에 새 파일을 생성하려고 시도합니다. POSIX 시스템에서는 umask에 의해 마스크된 모드 0666으로 파일이 생성되며, Windows에서는 상위 디렉터리의 권한을 상속받아 생성됩니다. Android에서는 파일 이름의 상위 디렉터리에 대한 접근 권한이 있어야 하며, 그렇지 않으면 존재하지 않는 이 파일을 생성할 수 없습니다.

QT_USE_NODISCARD_FILE_OPEN 및 setFileName()도 참조하십시오 .

[since 6.3] bool QFile::open(QIODeviceBase::OpenMode mode, QFileDevice::Permissions permissions)

파일이 존재하지 않고, ` mode `가 파일 생성을 의미하는 경우, 지정된 ` permissions` 권한으로 파일이 생성됩니다.

POSIX 시스템에서는 실제 권한이 umask 의 값에 따라 결정됩니다.

Windows에서는 ACL을 사용하여 권한이 에뮬레이트됩니다. 그룹에 다른 사용자에게 부여된 것보다 적은 권한이 부여된 경우, 이러한 ACL은 비정규 순서로 정렬될 수 있습니다. 이러한 권한을 가진 파일 및 디렉터리의 경우, ‘속성’ 대화 상자의 ‘보안’ 탭을 열면 경고가 표시됩니다. 그룹에 다른 사용자에게 부여된 모든 권한을 부여하면 이러한 경고를 피할 수 있습니다.

이 함수는 오버로드된 함수입니다.

이 함수는 Qt 6.3에서 도입되었습니다.

QIODevice::OpenMode, setFileName() 및 QT_USE_NODISCARD_FILE_OPEN도 참조하십시오 .

bool QFile::open(FILE *fh, QIODeviceBase::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)

지정된 ` mode`에서 기존 파일 핸들 ` fh `을 엽니다. 추가 옵션을 지정하려면 ` handleFlags `을 사용할 수 있습니다. 성공하면 ` true `을 반환하고, 그렇지 않으면 ` false`을 반환합니다.

예시:

#include <stdio.h>

void printError(const char* msg)
{
    QFile file;
    file.open(stderr, QIODevice::WriteOnly);
    file.write(msg, qstrlen(msg));        // write to stderr
    file.close();
}

이 함수를 사용하여 QFile 을 열 경우, close()의 동작은 AutoCloseHandle 플래그에 의해 제어됩니다. AutoCloseHandle이 지정되고 이 함수가 성공하면, close()를 호출하여 채택된 핸들을 닫습니다. 그렇지 않은 경우, close()는 파일을 실제로 닫지 않고 단지 내용을 플러시할 뿐입니다.

경고:

  1. fh 가 일반 파일을 가리키지 않는 경우(예: stdin, stdout 또는 stderr 인 경우), seek()를 호출할 수 없을 수 있습니다. 이러한 경우 size()는 0 를 반환합니다. 자세한 내용은 QIODevice::isSequential()을 참조하십시오.
  2. 이 함수는 파일 이름을 지정하지 않고 파일을 열기 때문에, QFileInfo 와 함께 이 QFile 를 사용할 수 없습니다.

Windows 플랫폼에 대한 참고 사항

fh 파일 및 기타 랜덤 액세스 장치에 액세스할 때는 반드시 바이너리 모드로 열어야 합니다(즉, 모드 문자열에 "rb"나 "wb"와 같이 'b'가 포함되어야 함). mode 에 QIODevice::Text를 전달하면 Qt가 줄 끝 문자를 변환합니다. stdin 및 stdout과 같은 순차적 장치는 이 제한의 영향을 받지 않습니다.

콘솔에서 stdin, stdout 및 stderr 스트림을 사용하려면 콘솔 애플리케이션 지원을 활성화해야 합니다. 이를 위해 애플리케이션의 프로젝트 파일에 다음 선언을 추가하십시오:

CONFIG += console

이 함수는 오버로드된 함수입니다.

close() 및 QT_USE_NODISCARD_FILE_OPEN도 참조하십시오 .

bool QFile::open(int fd, QIODeviceBase::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)

지정된 mode 에서 기존 파일 설명자 fd 를 엽니다. 추가 옵션을 지정하려면 handleFlags 를 사용할 수 있습니다. 성공하면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.

이 함수를 사용하여 QFile 을 열 경우, close()의 동작은 AutoCloseHandle 플래그에 의해 제어됩니다. AutoCloseHandle이 지정되고 이 함수가 성공하면, close()를 호출하여 채택된 핸들을 닫습니다. 그렇지 않은 경우, close()는 파일을 실제로 닫지 않고 플러시만 수행합니다.

경고: fd 가 일반 파일이 아닌경우 (예: 0(stdin), 1(stdout) 또는 2(stderr)인 경우), seek()를 호출할 수 없을 수 있습니다. 이러한 경우, size()는 0 를 반환합니다. 자세한 내용은 QIODevice::isSequential()을 참조하십시오.

경고: 이 함수는 파일 이름을 지정하지 않고 파일을 열기때문에 , QFileInfo 와 함께 이 QFile 를 사용할 수 없습니다.

이 함수는 오버로드된 함수입니다.

close() 및 QT_USE_NODISCARD_FILE_OPEN도 참조하십시오 .

[override virtual] QFileDevice::Permissions QFile::permissions() const

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

setPermissions()도 참조하십시오 .

[static] QFileDevice::Permissions QFile::permissions(const QString &fileName)

fileName 에 대한 QFile::Permission의 모든 OR 연산 조합을 반환합니다.

이 함수는 오버로드된 함수입니다.

[static, since 6.0] QFileDevice::Permissions QFile::permissions(const std::filesystem::path &filename)

이 함수는 오버로드된 함수입니다.

이 함수는 Qt 6.0에서 도입되었습니다.

bool QFile::remove()

fileName()로 지정된 파일을 삭제합니다.

파일이 성공적으로 삭제된 경우 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다.

파일이 열려 있는 경우, 제거되기 전에 파일이 닫힙니다.

setFileName()도 참조하십시오 .

[static] bool QFile::remove(const QString &fileName)

지정된 fileName 에 해당하는 파일을 삭제합니다.

파일이 성공적으로 삭제된 경우 ` true `를 반환하고, 그렇지 않은 경우 ` false`를 반환합니다.

이 함수는 오버로드된 함수입니다.

remove()도 참조하십시오 .

bool QFile::rename(const QString &newName)

fileName() 함수로 현재 지정된 파일의 이름을 newName 로 변경합니다. 성공하면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.

newName 라는 이름의 파일이 이미 존재하는 경우, rename()은 false 을 반환합니다(즉, QFile 은 기존 파일을 덮어쓰지 않습니다).

파일 이름 변경 전에 파일이 닫힙니다.

이름 변경 작업이 실패하면, Qt는 이 파일의 내용을 newName 로 복사한 다음, 이 파일을 삭제하고 newName 만 남깁니다. 복사 작업이 실패하거나 이 파일을 삭제할 수 없는 경우, 대상 파일 newName 가 삭제되어 이전 상태로 복원됩니다.

setFileName()도 참조하십시오 .

[since 6.0] bool QFile::rename(const std::filesystem::path &newName)

이 함수는 오버로드된 함수입니다.

이 함수는 Qt 6.0에서 도입되었습니다.

[static] bool QFile::rename(const QString &oldName, const QString &newName)

oldName 이라는 파일의 이름을 newName 으로 변경합니다. 성공하면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다.

newName 라는 이름의 파일이 이미 존재하는 경우, rename()은 false 을 반환합니다(즉, QFile 은 해당 파일을 덮어쓰지 않습니다).

이 함수는 오버로드된 함수입니다.

rename()도 참조하십시오 .

[override virtual] bool QFile::resize(qint64 sz)

QFileDevice::resize(qint64 sz)를 재구현합니다.

[static] bool QFile::resize(const QString &fileName, qint64 sz)

fileName 의 크기를 size(바이트 단위) sz 로 설정합니다. 크기 조정이 성공하면 true 를 반환하고, 그렇지 않으면 false를 반환합니다. sz 가 fileName 보다 크면 new_bytes는 0으로 설정되며, sz 가 더 작으면 파일은 단순히 잘립니다.

경고: 파일이 존재하지 않으면이 함수가 실패할 수 있습니다.

이 함수는 오버로드된 함수입니다.

resize()도 참조하십시오 .

void QFile::setFileName(const QString &name)

파일의 ` name `을 설정합니다. 파일 이름은 경로가 없거나, 상대 경로 또는 절대 경로일 수 있습니다.

파일이 이미 열려 있는 경우 이 함수를 호출하지 마십시오.

파일 이름에 경로가 없거나 상대 경로가 포함된 경우, open() 호출 시점의 애플리케이션 현재 디렉터리 경로가 사용됩니다.

예:

QFile file;
QDir::setCurrent("/tmp");
file.setFileName("readme.txt");
QDir::setCurrent("/home");
file.open(QIODevice::ReadOnly);      // opens "/home/readme.txt" under Unix

디렉터리 구분자 "/"는 Qt가 지원하는 모든 운영 체제에서 작동합니다.

fileName(), QFileInfo 및 QDir도 참조하십시오 .

[since 6.0] void QFile::setFileName(const std::filesystem::path &name)

이 함수는 오버로드된 함수입니다.

이 함수는 Qt 6.0에서 도입되었습니다.

[override virtual] bool QFile::setPermissions(QFileDevice::Permissions permissions)

QFileDevice::setPermissions(QFileDevice::Permissions 권한)을 재구현합니다.

지정된 permissions 에 따라 파일의 권한을 설정합니다. 성공하면 true 를 반환하고, 권한을 수정할 수 없는 경우 false 를 반환합니다.

경고: 이 함수는 ACL을 조작하지 않으므로, 그 효과가 제한될 수 있습니다.

permissions() 및 setFileName()도 참조하십시오 .

[static] bool QFile::setPermissions(const QString &fileName, QFileDevice::Permissions permissions)

fileName 파일의 권한을 permissions 로 설정합니다.

이 함수는 오버로드된 함수입니다.

[static, since 6.0] bool QFile::setPermissions(const std::filesystem::path &filename, QFileDevice::Permissions permissionSpec)

이 함수는 오버로딩된 함수입니다.

이 함수는 Qt 6.0에서 도입되었습니다.

[override virtual] qint64 QFile::size() const

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

[static, since 6.9] bool QFile::supportsMoveToTrash()

Qt가 현재 운영 체제에서 ` moveToTrash()` 함수를 사용하여 파일을 휴지통(recycle bin)으로 이동하는 기능을 지원하는 경우 ` true `을 반환하고, 그렇지 않은 경우 ` false `을 반환합니다. 이 함수가 ` true `을 반환한다고 해서 ` moveToTrash()`이 반드시 성공한다는 의미는 아닙니다. 특히, 이 함수는 사용자가 설정에서 해당 기능을 비활성화했는지 여부를 확인하지 않습니다.

이 함수는 Qt 6.9에서 도입되었습니다.

moveToTrash()도 참조하십시오 .

[static] QString QFile::symLinkTarget(const QString &fileName)

fileName 로 지정된 심볼릭 링크(또는 Windows의 바로 가기)가 가리키는 파일이나 디렉터리의 절대 경로를 반환하거나, fileName 가 심볼릭 링크에 해당하지 않는 경우 빈 문자열을 반환합니다.

이 이름은 실제 파일을 나타내지 않을 수도 있으며, 단지 문자열일 뿐입니다. 심볼릭 링크가 기존 파일을 가리키는 경우, QFile::exists()은 true 를 반환합니다.

QString QFile::symLinkTarget() const

심볼릭 링크(또는 Windows의 바로 가기)가 가리키는 파일이나 디렉터리의 절대 경로를 반환하며, 해당 객체가 심볼릭 링크가 아닌 경우 빈 문자열을 반환합니다.

이 이름은 실제 파일을 나타내지 않을 수 있으며, 단지 문자열일 뿐입니다. 심볼릭 링크가 존재하는 파일을 가리키는 경우, ` QFile::exists()`는 ` true `를 반환합니다.

이 함수는 오버로드된 함수입니다.

fileName() 및 setFileName()도 참조하십시오 .

© 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.