24

我是一个 Qt 初学者,只是遇到了这个问题。我正在寻找一个文件SomePath/NewDirectoryA/NewFile.kmlNewFile.kml将是 中唯一的文件NewDirectoryA,拥有这个目录只是为了维护项目中的语义)。

如果SomePath/NewDirectoryA/NewFile.kml存在,那么我将在我的代码中使用它,如果它不存在,那么我必须创建它。如果此文件不存在,则此目录也不存在于SomePath. 所以如果我必须创建一个文件,我可以使用 QFile 并以 ReadWrite 或 WriteOnly 模式打开它。

但问题是我必须使用目录本身创建文件。
我尝试使用QFile文件名SomePath/NewDirectoryA/NewFile.kml,但没有成功。

请建议我一种可以在给定位置 (SomePath) 的新目录 (NewDirectorA) 中创建新文件 (NewFile.kml) 的方法。

4

2 回答 2

42

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。

该函数将创建创建目录所需的所有父目录。

于 2010-06-11T16:19:17.010 回答
7

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
于 2018-03-26T11:46:49.733 回答