web-dev-qa-db-ja.com

Qtでフルパスで新しいファイルを作成する方法

私はQtの初心者で、問題に悩まされています。ファイルSomePath/NewDirectoryA/NewFile.kmlを探しています(NewFile.kmlNewDirectoryA内の唯一のファイルであり、このディレクトリはプロジェクトのセマンティクスを維持するためだけにあります)。

SomePath/NewDirectoryA/NewFile.kmlが存在する場合はコードで使用し、存在しない場合は作成する必要があります。このファイルが存在しない場合、このディレクトリもSomePathに存在しません。したがって、ファイルを作成するだけでよい場合は、QFileを使用して、ReadWriteモードまたはWriteOnlyモードで開くことができます。

しかし問題は、ディレクトリ自体でファイルを作成する必要があることです。
_QFileをファイル名SomePath/NewDirectoryA/NewFile.kmlで試してみましたが、うまくいきませんでした。

指定された場所(SomePath)の新しいディレクトリ(NewDirectorA)に新しいファイル(NewFile.kml)を作成する方法を教えてください。

21
GG.

bool QFile :: open (OpenModeモード)[仮想]

[...]

注:WriteOnlyモードまたはReadWriteモードで、関連するファイルがまだ存在しない場合、この関数はファイルを開く前に新しいファイルを作成しようとします。

ファイル作成に関するQtの警告

プラットフォーム固有の問題

UnixのようなシステムとWindowsでは、ファイルのアクセス権の扱いが異なります。 Unixライクなシステムの書き込み不可能なディレクトリでは、ファイルを作成できません。これは、たとえば「マイドキュメント」ディレクトリが通常は書き込み不可であるWindowsでは必ずしも当てはまりませんが、その中にファイルを作成することは可能です。

ディレクトリは

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

DirNameというサブディレクトリを作成します。

そして

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

ディレクトリパスdirPathを作成します。

関数は、ディレクトリの作成に必要なすべての親ディレクトリを作成します。

37

私の知る限り、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
4
ymoreau