私はQtの初心者で、問題に悩まされています。ファイルSomePath/NewDirectoryA/NewFile.kml
を探しています(NewFile.kml
はNewDirectoryA
内の唯一のファイルであり、このディレクトリはプロジェクトのセマンティクスを維持するためだけにあります)。
SomePath/NewDirectoryA/NewFile.kml
が存在する場合はコードで使用し、存在しない場合は作成する必要があります。このファイルが存在しない場合、このディレクトリもSomePath
に存在しません。したがって、ファイルを作成するだけでよい場合は、QFileを使用して、ReadWriteモードまたはWriteOnlyモードで開くことができます。
しかし問題は、ディレクトリ自体でファイルを作成する必要があることです。
_QFile
をファイル名SomePath/NewDirectoryA/NewFile.kml
で試してみましたが、うまくいきませんでした。
指定された場所(SomePath)の新しいディレクトリ(NewDirectorA)に新しいファイル(NewFile.kml)を作成する方法を教えてください。
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を作成します。
関数は、ディレクトリの作成に必要なすべての親ディレクトリを作成します。
私の知る限り、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