1、背景
软件重启如果要保存上次设置的参数,那么就需要用到文件操作。
2、几个常见的问题
1)字符串写入不完整
file.Write(str.GetBuffer(),len*sizeof(TCHAR));不能直接用sizeof(str)求长度。
2)换行
换行一般有三种格式: “\n" "\r\n" "\r" 用"\r\n"最保险
std::ofstream fout("..\\project\\CameraParam.dat");
if (fout.is_open())
{
fout<<"CameraNum ";
fout<<CameraNum<<"\r\n";
fout<<"NetNum ";
fout<<NetNum<<"\r\n";
<span style="white-space:pre"> </span>}
3、文件操作
1)目录存在判定
if(!SetCurrentDirectory(_T("..\\project")))
{
return MODE_DEFINE; //文件夹不存在,直接退出文本模式
}
2) 文件存在判定
if (!PathFileExists(_T("..\\project\\mode.dat")))
{
return MODE_DEFINE; //文件不存在,直接退出文本模式
}
int a;
char str[20];
memset(str, 0, sizeof(char));
std::ifstream fin("..\\project\\mode.dat");
fin>>str;
fin>>a;
fin.close();
4)文件写入
std::ofstream fout("..\\project\\mode.dat");
if (fout.is_open())
{
fout<<"FileMode ";
if ( MODE_SET == mode )
{
fout<<1<<"\r\n";
}
else if ( MODE_RUN == mode )
{
fout<<2<<"\r\n";
}
else
{
fout<<0<<"\r\n";
}
fout.close();
}
5)读取特定值
std::ifstream fin("..\\project\\CameraParam.dat");
int a;
char str[20];
memset(str, 0, sizeof(char));
int line = 0;
while (fin != NULL)
{
fin>>str;
fin>>a;
line++;
if( strcmp("CameraNum",str) == 0 )
{
fin.close();
return a; //返回相机数
}
}