Как создать новый файл с полным путем в 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