web-dev-qa-db-fra.com

Comment créer un nouveau fichier avec un chemin complet dans Qt?

Je suis un débutant Qt et je suis juste resté coincé avec le problème. Je recherche un fichier SomePath/NewDirectoryA/NewFile.kml (NewFile.kml sera le seul fichier dans NewDirectoryA, ayant ce répertoire juste pour maintenir la sémantique dans le projet).

Si SomePath/NewDirectoryA/NewFile.kml existe alors je vais l'utiliser dans mon code et s'il n'existe pas alors je dois le créer. Si ce fichier n'existe pas, ce répertoire n'existe pas non plus dans SomePath. Donc, si seulement je dois créer un fichier, je peux utiliser QFile et l'ouvrir en mode ReadWrite ou WriteOnly.

Mais le problème est que je dois créer le fichier avec le répertoire lui-même.
J'ai essayé avec QFile avec le nom de fichier SomePath/NewDirectoryA/NewFile.kml mais ça n'a pas marché.

Veuillez me suggérer un moyen par lequel je peux créer un nouveau fichier (NewFile.kml) dans un nouveau répertoire (NewDirectorA) à un emplacement donné (SomePath).

21
GG.

bool QFile :: open (mode OpenMode) [virtuel]

[...]

Remarque: En mode WriteOnly ou ReadWrite, si le fichier correspondant n'existe pas déjà, cette fonction essaiera de créer un nouveau fichier avant de l'ouvrir.

Avertissement de Qt pour la création de fichiers

Problèmes spécifiques à la plate-forme

Les autorisations de fichiers sont gérées différemment sur les systèmes de type Unix et Windows. Dans un répertoire non accessible en écriture sur les systèmes de type Unix, les fichiers ne peuvent pas être créés. Ce n'est pas toujours le cas sous Windows, où, par exemple, le répertoire "Mes documents" n'est généralement pas accessible en écriture, mais il est toujours possible d'y créer des fichiers.

Les répertoires sont créés avec

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

Crée un sous-répertoire appelé dirName.

et

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

Crée le chemin de répertoire dirPath.

La fonction créera tous les répertoires parents nécessaires pour créer le répertoire.

37
György Andrasek

AFAIK il n'est pas possible de créer le fichier et le répertoire directement avec QFile. Vous devez d'abord créer le répertoire ( QDir::mkpath créera le chemin complet) puis le fichier ( 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
4
ymoreau