【零基础QT学习——文件创建、拷贝、读写与下载】

文件相关的处理

1、创建文件夹

bool makeNewDir(const std::string& name)
{
	QString dirt = QString::fromStdString(name);  //转换文件名的类型
	QDir dir; //QDir 访问系统当前文件
	if (!dir.exists(dirt))  //若如果不存在则创建
	{
		if (!dir.mkdir(dirt))  //创建失败,返回false
		{
			return false;
		}
	}
	return true;
}

2、文件拷贝

bool copyFileToPath(QString sourceDir, QString toDir, bool coverFileIfExist)
{
	/*-----sourceDir 源文件路径 如"C:/text.ini"
	*-----toDir        目标文件路径 如"D:/text.ini" 
	表示将c盘根目录下的tetx.ini拷到D盘根目录下以text.ini命名
	*-----如果D盘根目录已经存在text.ini判断coverFileIfExist 如果为true则覆盖否则退出*/
	toDir.replace("\\", "/");
	if (sourceDir == toDir) {     / /源目录与目标目录相同,直接返回拷贝不成功
		return true;
	}
	if (!QFile::exists(sourceDir)){    //判断源拷贝文件是否存在
		return false;
	}

	QDir* createfile = new QDir;
	bool exist = createfile->exists(toDir);  
	if (exist)     //如果目标路径中存在源文件 直接覆盖
	{
		if (coverFileIfExist)
		{
			createfile->remove(toDir);   
		}
	}
	
	if (!QFile::copy(sourceDir, toDir))
	{
		return false;
	}
	return true;
}

3、数据写入文件

//将数据写入文件,保存在电脑端
// data_path --保存文件的路径,data–需要保存的数据,size–需要保存数据的大小

void writeDataFile(const std::string& data_path, void* data, uint32_t size, bool is_override)
{
	static std::ofstream ofstrm;
	if (!ofstrm.is_open())
	{
		if (is_override)
		{
			ofstrm.open(data_path, std::ios::binary | std::ios::out);
		}
		else
		{
			ofstrm.open(data_path, std::ios::binary | std::ios::app);
		}
	}

	ofstrm << std::string((char*)data, size);
	ofstrm.close();
}

4、下载数据

(1)、传入路径,根据路径创建对应的文件夹;
(2)、传入路径+保存文件名、数据、数据大小,将数据保存到对应路径下的文件中;

void saveData(std::string& data_path,  void * data, uint32_t size)
{
   //在data_path路径下创建文件夹,
	makeNewDir(data_path);   
	std::string dist_path = data_path + std::string("\\text.ini");   
	//将数据保存到data_path文件夹下的text.ini文件内
	writeDataFile(dist_path, data, size, is_override);
}

5、预览获取文件路径

//预览添加ini文件;
QString PreviewFile(QString filetype)
{
	//打卡文件
	QSettings setting("Setting.ini", QSettings::IniFormat);

	//读取文件键值相应的位置--写入上一次加载文件的路径
	QString lastPath = setting.value("LastFilePath").toString();

	//从上一次打开的路径中打开
   // QString n_path =QFileDialog::getOpenFileName(this,tr("Open Directory"),lastPath,tr("file(*.ini)"));
	QString n_path = QFileDialog::getOpenFileName(this, tr("Open Directory"), lastPath, tr(filetype.toUtf8()));
	if (!n_path.isEmpty())
	{
		setting.setValue("LastFilePath", n_path);  //记录路径到QSetting中保存
	}
	return n_path;
}

6、读文件

//读取数据,将文件中数据存储到buf中;

int ReadDataFile(std::string path,char *buf,  int inlen)
{
  //假设文件中有多帧数据,且一帧数据大小为2000;
    FILE *fp = fopen(path.c_str(), "rb");  // “rb ”读取二进制
	if (fp == NULL) return 0;
	int index = 0;
//	for (int i = 0; i < 1; i++){
//		fread(buf, sizeof(uint16_t), len, fp);
//	}
	for (index = 0; index < len; index += 2000) {
		fread(buf + index, 2000, 1, fp);
	}
	if (index < len)
		fread(buf + index, len - index, 1, fp);
	fclose(fp);
	return len;

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值