Как создать новый файл с полным путем в Qt?

Я новичок Qt и просто застрял с проблемой. Я ищу файл SomePath/NewDirectoryA/NewFile.kml (NewFile.kml будет единственным файлом в NewDirectoryA, имея этот каталог только для поддержания семантики в проекте).

если SomePath/NewDirectoryA/NewFile.kml существует, тогда я буду использовать его в своем коде, и если он не существует, я должен его создать. Если этот файл не существует, то этот каталог также не существует в SomePath. Поэтому, если мне нужно создать файл, я могу использовать QFile и открыть его в ReadWrite или WriteOnly режим.

но проблема в том, что я должен создать файл с самим каталогом.
Я пробовал с QFile имя файла SomePath/NewDirectoryA/NewFile.kml но это не сработало.

пожалуйста, предложите мне способ, которым я могу создать новый файл (NewFile.kml) в новом каталоге (NewDirectorA) в заданном месте (SomePath).

2 ответов


bool QFile:: open (режим OpenMode) [виртуальный]

[...]

Примечание: в режиме WriteOnly или ReadWrite, если соответствующий файл еще не существует, эта функция попытается создайте новый файл перед его открытием.

предостережение Qt для создания файла

Специфические Проблемы Платформы

обрабатываются права доступа к файлам по-разному на Unix-подобных системах и Окна. В записи каталога в Unix-подобных системах, файлы не может быть создан. Это не всегда так на Windows, где, для например, каталог "Мои документы" обычно не доступен для записи, но он в нем еще можно создавать файлы.

каталоги создаются с

bool QDir:: mkdir (const QString & dirName ) const

создает подкаталог каталог.

и

bool QDir:: mkpath (const QString & dirPath ) const

создает путь к каталогу dirPath.

функция создаст все родительские каталоги, необходимые для создания справочник.


AFAIK невозможно создать файл и каталог непосредственно с помощью QFile. Вы должны сначала создать каталог (QDir::mkpath создаст полный путь), а затем файл (QFile::open).

QString path("SomePath/NewDirectoryA/");
QDir dir; // Initialize to the desired dir if 'path' is relative
          // By default the program's working directory "." is used.

// We create the directory if needed
if (!dir.exists(path))
    dir.mkpath(path); // You can check the success if needed

QFile file(path + "NewFile.kml");
file.open(QIODevice::WriteOnly); // Or QIODevice::ReadWrite