文件相关的处理
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;
}