Dat文件的输入与输出

本文代码来源于:https://blog.youkuaiyun.com/zy19940906/article/details/49659895

#pragma once
#ifndef _STRUCT_H_
#define _STRUCT_H_

#include<vector>
#include<iostream>
#include <string>
using namespace std;
#define  MaxSize 10
#pragma  pack(1)
typedef struct _TEST_DAT
{
    int type;
    //char name[MaxSize];
    int age;
}TESTDAT;
#pragma pack()
#endif
#pragma once
#ifndef _TXT_TO_FILE_H_
#define _TXT_TO_FILE_H_
#include<vector>
#include<iostream>
#include<fstream>
#include<string>
#include"Struct.h"
#include<stdio.h>
using namespace std;
class TxtToFile
{
public:
    TxtToFile();
    ~TxtToFile();
    bool SaveToDat(string _datPath);//外调函数,保存到dat文件
    bool GetFromDat(string _datPath);
private:
    TESTDAT m_dat;
    fstream m_datstream;
    vector<TESTDAT>m_getdat;
private:
    //把基本的Number类型写入文件流中
    template<class T>
    bool Write(T value)
    {
        m_datstream.write(reinterpret_cast<char *>(&value), sizeof(T));
        return true;
    }
    //把字符串写入文件流
    void WriteString(string _str, int _count);

    __int64 getFileSize(const char *filename);
};
#endif
#include "TxtToFile.h"

#include <sstream>


TxtToFile::TxtToFile()
{
    m_dat = TESTDAT{ 123, 345 };
}


TxtToFile::~TxtToFile()
{
}

bool TxtToFile::SaveToDat(string _datPath)
{
    if (_datPath.size() == 0)
    {
        return false;
    }
    m_datstream.open(_datPath, fstream::out | fstream::binary);
    if (!m_datstream.is_open())
    {
        cout << "open" << _datPath << "Failed" << endl;
        m_datstream.close();
        return false;
    }
    Write(m_dat.type);
    //WriteString(m_dat.name, MaxSize);
    Write(m_dat.age);

    cout << "Successed" << endl;
    m_datstream.close();
    return true;
}

void TxtToFile::WriteString(string _str, int _count)
{
    if ((int)_str.length() >= _count)
    {
        cout << "write string error!" << endl;
        return;
    }
    m_datstream << _str;
    int len = _count - _str.length();
    cout << _count << endl;
    cout << _str.length() << endl;
    while (len--)
    {
        m_datstream << "\0";
    }
}

bool TxtToFile::GetFromDat(string _datPath)
{
    if (_datPath.size() == 0)
    {
        return false;
    }
    __int64 scount = 0;
    __int64 stuctsize = sizeof(TESTDAT);
    cout << stuctsize;
    TESTDAT testdat;
    __int64 filesize = getFileSize(_datPath.c_str());
    cout << filesize;
    //if (filesize == 0 || filesize < stuctsize || (filesize%stuctsize) != 0)
    //{
    //  return false;
    //}
    //scount = filesize / stuctsize;
    //cout << scount;
    FILE *inStream = NULL;
    const char *name = _datPath.c_str();
    fopen_s(&inStream,name, "rb");
    if (inStream == NULL)return false;
    for (int i = 0; i < 1; i++)
    {
        fread(&testdat, stuctsize, 1, inStream);
        m_getdat.push_back(testdat);
        cout << testdat.age << " " << testdat.type << " " << endl;
    }
    fclose(inStream);
    return true;
}

__int64 TxtToFile::getFileSize(const char *filename)
{
    __int64 size = 0;
    fstream instreams;
    instreams.open(filename, ios::_Nocreate);
    if (!instreams.is_open())
    {
        return 0;
    }
    instreams.seekg(0, ios::end);//移到最后
    size = instreams.tellg();//告诉现在位置在哪里
    instreams.close();
    return size;
}


#include"TxtToFile.h"

int main()
{
    TxtToFile ttofile;
    ttofile.SaveToDat("Test.Dat");
    ttofile.GetFromDat("Test.Dat");
    getchar();
    getchar();
    return 0;
}

Dat文件是一个存取数据的文件,不管是什么数据我们都是将其转换成char型数据进行的存取,所以在读取出来时,我们必须严格按照存入的格式进行存取,比如我们存储数据为int double float那么我们就必须按照这三种格式进行存取,出现一个字节的偏移都会导致后面的结果全面出错。所以我们用记事本打开时dat文件时总是乱码的原因。

### 如何在CLion中安装并配置OpenCV #### 安装依赖库 为了能够在CLion项目中使用OpenCV,需要先确保本地已经正确安装了OpenCV及其贡献模块。可以通过克隆官方GitHub仓库来获取最新版本的源代码[^1]。 对于特定版本如`3.4.9`,除了常规编译流程外,在CMake配置阶段可能会尝试在线拉取一些预训练模型文件(例如面部特征点检测数据)。为了避免网络连接问题影响构建过程,建议预先手动下载这些资源并放置于指定路径下[^2]: ```bash mkdir -p ~/.cache/opencv/data/ wget https://raw.githubusercontent.com/opencv/opencv_3rdparty/8afa57abc8229d611c4937165d20e2a2d9fc5a12/face_landmark_model.dat \ -O ~/.cache/opencv/data/7505c44ca4eb54b4ab1e4777cb96ac05-face_landmark_model.dat ``` #### 配置CLion环境 完成上述准备工作之后,接下来就是在IDE内部设置必要的参数以便顺利集成OpenCV功能。 ##### 创建新工程或打开现有工程 启动CLion后可以选择创建一个新的C++项目或者导入已有代码库作为基础框架。 ##### 修改CMakeLists.txt文件 编辑项目的`CMakeLists.txt`脚本以引入FindOpenCV.cmake宏定义,并通过`find_package()`指令加载所需的组件列表。下面是一个简单的例子说明如何操作: ```cmake cmake_minimum_required(VERSION 3.10) project(MyOpencvProject LANGUAGES CXX) set(CMAKE_CXX_STANDARD 14) # 查找系统中存在的 OpenCV 库位置 find_package(OpenCV REQUIRED core imgproc highgui) add_executable(${PROJECT_NAME} main.cpp) target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS}) include_directories(${OpenCV_INCLUDE_DIRS}) ``` 如果希望一步简化调试体验,则可以考虑利用插件增强开发效率。比如,“OpenCV Image Viewer Plugin for CLion”能够帮助开发者更直观地查看图像处理效果[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值