QT文件目录操作
2014年11月28日
读取:QFile打开文件,QTextStream获取文件流,QTextStream调用read函数读取数据。使用完成后关闭。
写入:打开时用write权限,然后向流中写入信息。
参见:QT文件读写.docx
使用QDir读取当前目录下的所有内容,使用【】可以读取其中一条子目录。
if(!QDir(strTargetPath).exists()){
QDir().mkdir(strTargetPath);
}
参考:
http://stackoverflow.com/questions/2241808/checking-if-a-folder-exists-and-creating-folders-in-qt-c
指定目录后可以操作相应的信息。
示例:
//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"
配置文件用于记录用户对软件的设定。在Windows中使用系统注册表(麻烦),在MacOS中使用喜好XML。在Unix中无标准,一般使用ini文件。
所以默认情况下,如果我们创建一个QSettings,则在Windows中生成一个注册表项,在其它操作系统中也有相应的文件生成。如果指定为INIFormat,可以在创建时指定存储位置,默认情况下位置存放在用户文档下。
QSettings是线程安全的,但数据更改后并不会立即写入,使用Sync()可以获取、写入最新的数据。
配置文件有多种类型,NativeFormat表示使用系统API定义,也INIFormat表示使用ini文件,也可以自定义类型。
默认情况下,使用用户组织=》程序名作为QSettings的名称。在INIFormat中可以指定名称。
配置文件分为用户范围和系统范围两种作用域。
配置文件中以【Section】为分割段。
配置文件中的数据以键值对的方式组织数据,键是QString类型,值为QVariant类型。
可以将任何类型直接转换为QVariant,但是从QVariant只能直接转换为QtCore范围内的格式,对于其它格式,使用QVariant::value<class>进行转换。
不同的OS中对于大小写敏感性不同,所以应该尽量使用相同的大小写格式读写数据,但不以大小写为识别特性。
在查询配置项时,可以按照用户项、组织项、系统用户项、系统组织项的顺序查找,也可以禁用这种回溯查询。
如果在QApplication中指定ApplicationName、OrganizationName,则可以直接使用QSettings默认构造函数创建。
如果创建指定名称的ini文件,则可以指定ini文件路径。
使用setValue(key,value)写入。
直接写入,以/表示Section/Key。
或是以
BeginGroup(Section);
setValue(key,value);
endGroup();
使用value(key)读取。
直接写入,以/表示Section/Key。
或是以
BeginGroup(Section);
value(key,value);
endGroup();
参考:http://blog.csdn.net/qiurisuixiang/article/details/7760828
//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();