IniFile Read Write

#include <boost/shared_ptr.hpp>
#include <QSettings>
class IniFile
{
public:
	explicit IniFile(const char * path):m_path(path){}
	~IniFile(){};
	QString GetPath() const {return m_path;}
	void SetPath(const char * path) {if(m_path != path) m_path = path;}
	QString GetValue(const char * key)
	{
		if(key == NULL)
		{
			return QString();
		}
		if(m_pSetting == NULL)
		{
			// create setting failed
			if(CreateSetting() != 0)
			{
				return QString();
			}
		}
		return m_pSetting->value(key).toString();
	}
	int SetValue(const char *  key, const char *  value)
	{
		if(key == NULL)
		{
			return  -1;
		}
		
		if(m_pSetting == NULL)
		{
			if(CreateSetting() != 0)
			{
				return -1;
			}
		}
		m_pSetting->setValue(key, value);
		return 0;
	}
	int Remove(const char * key)
	{
		if(key == NULL) 
		{
			return -1;
		}
		if(m_pSetting == NULL)
		{
			// create setting failed
			if(CreateSetting() != 0)
			{
				return -1;
			}
		}
		this->m_pSetting->remove(key);
		return 0;
	}
protected:
	int CreateSetting()
	{
		if(m_path == NULL)
		{
			return -1;
		}
		m_pSetting.reset(new QSettings(m_path, QSettings::IniFormat));
		return 0;
	}
private:
	const char * m_path;
	boost::shared_ptr<QSettings> m_pSetting;
};

### Qt 文件读写教程 #### 一、基本文件读取与保存功能 在Qt中,`QFile` 类提供了对本地文件系统的访问接口。通过 `QTextStream` 或者 `QDataStream` 可以方便地进行文本或二进制数据流的操作。 对于简单的文本文件读写: ```cpp // 打开并读取文本文件的内容到QString对象里 bool readFileContent(const QString &path, QString &content){ QFile file(path); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return false; QTextStream in(&file); content = in.readAll(); file.close(); return true; } // 将字符串内容保存至指定路径下的文本文件内 void saveFileContent(const QString &path, const QString &text){ QFile file(path); if (file.open(QIODevice::WriteOnly | QIODevice::Text)){ QTextStream out(&file); out << text; file.flush(); file.close(); } } ``` 针对更复杂的数据结构存储需求,则推荐采用序列化技术来完成持久化的任务。这里给出一个利用 `QDataStream` 实现的对象存盘例子[^1]。 ```cpp class FileInfo { public: int id; QByteArray name; friend QDataStream& operator<<(QDataStream &stream, const FileInfo &fi) { stream << fi.id << fi.name; return stream; } friend QDataStream& operator>>(QDataStream &stream, FileInfo &fi) { stream >> fi.id >> fi.name; return stream; } }; void serializeToFile(const QList<FileInfo> &list, const QString &filename) { QFile file(filename); if(file.open(QIODevice::WriteOnly)) { QDataStream out(&file); foreach(auto item, list) { out << item; } file.close(); } } QList<FileInfo> deserializeFromFile(const QString &filename) { QList<FileInfo> result; QFile file(filename); if(file.open(QIODevice::ReadOnly)) { QDataStream in(&file); while(!in.atEnd()) { FileInfo temp; in >> temp; result.append(temp); } file.close(); } return result; } ``` #### 二、特定格式文件的处理 当涉及到Excel表格时,可以借助第三方库如 qtxlsx 来简化开发工作量;而对于 XML 文档来说,既可以选择 DOM 方式的 `QDomDocument` 进行树状遍历编辑,也可以考虑 SAX 风格的 `QXmlSimpleReader` 结合自定义处理器来进行高效解析[^3]。 例如,在Linux环境下使用Qt应用程序操作Excel文件可以通过如下方式实现: ```cpp #include "xlsxdocument.h" using namespace QXLSX; void writeExcelExample() { Document xlsx; Worksheet *sheet = xlsx.addSheet(QStringLiteral("Sheet1")); sheet->write(1, 1, QStringLiteral("Hello World!")); // A1单元格输入文字 auto allFiles = m_reader->fileInfoList(); // 获取所有文件信息列表 for(int i=0;i<allFiles.size();++i){ sheet->write(i+2, 1, allFiles[i].fileName()); // B列依次填入各个文件名 } xlsx.saveAs(QStringLiteral("/tmp/example.xlsx")); } ``` 上述代码片段展示了如何创建一个新的 Excel 工作簿并向其中填充一些基础数据以及从已有资源获取的信息。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值