今天只做了两件事,学会C++读文件ifstream和写文件ofstream.记录下来,以后别忘记了。
用于读raw时的注意事项:
1.如果顺序读取,必须使用interleave的raw文件格式。即rgbrgbrgbrgb。
如果使用noninterleave,则变为:rrrrggggbbbb。读出来的数据会变。注意。
2.合并时,注意数据转换,如果是char转成int,就变成ASCII码了。所以尽量不要使用数据转换。
具体两个代码如下:
读取raw
文件为height65,width60.interleave的raw文件
#include<windows.h>
#include
#include
#include
using namespace std;
int main(void)
{
BYTE *pixel;
ifstream fin(“2.raw”,ios::binary);
if(!fin)
{
cerr<<“Open file error!”<<endl;
return false;
}
pixel=new BYTE[11700];
fin.read((char *)(pixel),11700);
int k = 0,i,j;
int r,g,b;
BYTE *pt;
ofstream fout;
int t=0;
fout.open(“2.txt”,ios::out);
for(i=0;i<65;i++)
{
for(j=0;j<60;j++)
{
pt =pixel+i*(603)+3j;
r = (int)(pt);
g = (int)((pt+1));
b = (int)(*(pt+2));
cout<<r<<" “<<g<<” “<<b<<” “;
fout<<r<<” “<<g<<” “<<b<<” ";
}
fout<<endl;
}
fout.close();
delete [] pixel;
pixel = NULL;
system(“pause”);
return 0;
}
2.合并
合并10个txt文件,到2.txt
#include
#include
#include
#include <stdLib.h>
#include
#include <math.h>
#include
#include
#include <time.h>
#include <windows.h>
using namespace std;
int main(void)
{
bool mergeRaw(char Filename[]);
BYTE *pixel;
BYTE *pt;
stringstream in_name;
for (int i=0;i<11;i++)
{
in_name.str("");
in_name<<“txt/”<< i+1000 <<".txt";
ifstream fin(in_name.str().c_str());
if(!fin)
{
cerr<<“Open file error!”<<endl;
return 0;
}
pixel=new BYTE [3];
fin.read((char *)(pixel),3);
ofstream fout(“txt/2.txt”,ios::app);
for(int i=0;i<3;i++)
{
pt=pixel+i;
cout<<(char)(*pt); //这里如果用(int)(*pt),结果将变成ASCII码。
fout<<(char)(*pt);
}
fout.close();
fin.close();
}
delete [] pixel;
pixel = NULL;
system(“pause”);
return 0;
}