QT文件目录操作

QT文件目录操作

[email protected]

2014年11月28日

 

1 目的:进行文件和目录相关操作

2 方法

2.1 文件读写:QFile

读取:QFile打开文件,QTextStream获取文件流,QTextStream调用read函数读取数据。使用完成后关闭。

写入:打开时用write权限,然后向流中写入信息。

参见:QT文件读写.docx

2.2 目录读写:QDir

使用QDir读取当前目录下的所有内容,使用【】可以读取其中一条子目录。

2.2.1检查文件夹是否存在,不存在则创建

    if(!QDir(strTargetPath).exists()){
        QDir().mkdir(strTargetPath);

    }

参考:

http://stackoverflow.com/questions/2241808/checking-if-a-folder-exists-and-creating-folders-in-qt-c

2.3 文件信息读写:QFileInfo

指定目录后可以操作相应的信息。

示例:

//xx.cpp

voidMainWindow::addVectorLayer()
{
    QStringstrFileName=QFileDialog::getOpenFileName(this,
         tr("VectorLayer"),"./",tr("ShapeFiles(*.shp);;AllFiles(*.*)"));
    QFileInfofi(strFileName);
    QStringstrPath=fi.path();
    QStringstrFullName=fi.fileName();
    QStringstrName=fi.baseName();
    QStringstrSuffix=fi.suffix();
    qDebug()<<"filename="<<strFileName<<",path="<<strPath<<",fullName="<<strFullName;
    qDebug()<<",name="<<strName<<",suffix="<<strSuffix<<endl;

}

//result

filename = "D:/Test/data/国家400万/bou1_4l.shp",path= "D:/Test/data/国家400万" ,fullName= "bou1_4l.shp"

,name= "bou1_4l" ,suffix= "shp"

2.4 配置文件:QSettings

2.4.1原理

配置文件用于记录用户对软件的设定。在Windows中使用系统注册表(麻烦),在MacOS中使用喜好XML。在Unix中无标准,一般使用ini文件。

所以默认情况下,如果我们创建一个QSettings,则在Windows中生成一个注册表项,在其它操作系统中也有相应的文件生成。如果指定为INIFormat,可以在创建时指定存储位置,默认情况下位置存放在用户文档下。

QSettings是线程安全的,但数据更改后并不会立即写入,使用Sync()可以获取、写入最新的数据。

配置文件有多种类型,NativeFormat表示使用系统API定义,也INIFormat表示使用ini文件,也可以自定义类型。

2.4.2数据组织

默认情况下,使用用户组织=》程序名作为QSettings的名称。在INIFormat中可以指定名称。

配置文件分为用户范围和系统范围两种作用域。

配置文件中以【Section】为分割段。

配置文件中的数据以键值对的方式组织数据,键是QString类型,值为QVariant类型。

可以将任何类型直接转换为QVariant,但是从QVariant只能直接转换为QtCore范围内的格式,对于其它格式,使用QVariant::value<class>进行转换。

不同的OS中对于大小写敏感性不同,所以应该尽量使用相同的大小写格式读写数据,但不以大小写为识别特性。

在查询配置项时,可以按照用户项、组织项、系统用户项、系统组织项的顺序查找,也可以禁用这种回溯查询。

2.4.3创建配置文件

如果在QApplication中指定ApplicationName、OrganizationName,则可以直接使用QSettings默认构造函数创建。

如果创建指定名称的ini文件,则可以指定ini文件路径。

2.4.4写入INI数据

使用setValue(key,value)写入。

直接写入,以/表示Section/Key。

或是以

BeginGroup(Section);

setValue(key,value);

endGroup();

2.4.5读取INI数据

使用value(key)读取。

直接写入,以/表示Section/Key。

或是以

BeginGroup(Section);

value(key,value);

endGroup();

 

参考:http://blog.csdn.net/qiurisuixiang/article/details/7760828

2.4.6示例

    //inisetting create and writing
    QStringstrIniFilePath=qApp->applicationDirPath()+"/npp.ini";
    QSettingsiniSetting(strIniFilePath,QSettings::IniFormat);
    iniSetting.setValue("section/a","a-value");
    iniSetting.setValue("section2/aa","aa-value");
    iniSetting.beginGroup("Group");
    iniSetting.setValue("x1","xx1");
    iniSetting.setValue("y1","xy1");
iniSetting.endGroup();
 
    //inisettings reading
    QStringstrIniFilePath=qApp->applicationDirPath()+"/"+qApp->applicationName()+".ini";
    QSettingsiniSetting(strIniFilePath,QSettings::IniFormat);
    QStringstrPreceptList=iniSetting.value("precept/precept").toString();
    m_lstPreceptItem=strPreceptList.split(",");
    QStringstrTargetList=iniSetting.value("target/target").toString();
    m_lstTargetItem=strTargetList.split(",");
 
    iniSetting.beginGroup("sql");
    for(inti=0;i<m_lstPreceptItem.size();++i){
        QStringstrSQL=iniSetting.value(m_lstPreceptItem[i]).toString();
        m_lstSQL<<strSQL;
        qDebug(strSQL.toStdString().c_str());
    }

    iniSetting.endGroup();

 

你可能感兴趣的:(开发,qt)