【发布时间】:2012-09-04 20:16:26
【问题描述】:
我正在编写一个程序,该程序从两个单独文件中的两个表创建一个查找表。当我阅读第一张表格时,一切都被正确阅读。但是,当我阅读第二个文件时,fopen 似乎并没有打开整个文件。
我这样说是因为编译器实现了_iobuf 文件结构,并且_cnt 的初始化似乎比第一次初始化时低很多(_cnt = 530),正如我从文件它减少。
这是我的代码的 sn-p:
int vertical,horizontal,channels,count;
FILE *fp;
fp = fopen(filename,"r");
if(fp==NULL){
cout << "File not found" << endl;
return Mat();
}else{
cout << "Opening and Reading " << filename << endl;
}
//Read header
fread(&count,4,1,fp);
cout << "ReadHistogram(): Count number is " << count;
if(count!= 5){
cout << "Header file reads: " << count << endl;
return Mat();
}
//Read size
fread(&vertical,4,1,fp);
//cout << "ReadHistogram(): Vertical size:" << vertical <<endl;
fread(&horizontal,4,1,fp);
//cout << "ReadHistogram(): Horizontal size:" << horizontal <<endl;
fread(&channels,4,1,fp);
//cout << "ReadHistogram(): Channel size:" << channels<<endl;
//Create Mat array
int size[] = {vertical, horizontal, channels};
Mat histogram(3,size,CV_64F,Scalar::all(0));
//Read in array
count = 0;
for(int i=0;i<vertical;i++){
for(int j=0;j<horizontal;j++){
for(int k=0;k<channels;k++){
double temp5;
fread(&temp5,8,1,fp);
histogram.at<double>(i,j,k) = temp5;
if(count <= 300){
cout << "Array(" << i+1 << "," << j+1 << "," << k+1 << ")" << "=" << histogram.at<double>(i,j,k) << endl;
cout << "Temp5 is " << temp5 << endl;
}
count++;
}
}
}
cout << "Done reading " << filename << endl;
fclose(fp);
return histogram;
PS:我一直试图在FILE 结构中查找_cnt 到底是什么,但我找不到任何类似的东西。任何人都可以提供任何指示,我将不胜感激。
【问题讨论】:
-
你能读取文件的全部内容吗?
-
是的,我可以读取值,但只有 for 循环开头的值是正确的。问题在于,在某一点之后,fread 开始返回与文件中不同的值。
-
如果先读取第二个文件会发生什么?两次之间发生了什么变化?是否涉及任何线程?您是否同时在其他任何地方使用该文件?尝试使您的功能更短。请发帖SSCCE。
-
FILE结构的成员是私有的。不要担心它们是否具有您期望的值。如果对文件定义的操作(fopen、fread、fclose等)行为不正确,那么你有一个合法的问题。
标签: c++ file file-io file-structure