Как создать новый файл с полным путем в Qt? - PullRequest
17 голосов
/ 11 июня 2010

Я новичок в 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 ]

34 голосов
/ 11 июня 2010

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

[...]

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

Предупреждение Qt о создании файла

Проблемы, связанные с платформой

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

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

BOOL QDir :: MkDir (const QString & dirName) const

Создает подкаталог с именем Dirname.

и

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

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

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

1 голос
/ 26 марта 2018

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