C++ 二进制读取器在读取精确字节数时不触发eof位
我正在使用以下代码将图像写入二进制文件:C++ 二进制读取器在读取精确字节数时不触发eof位,c++,ifstream,eof,ofstream,C++,Ifstream,Eof,Ofstream,我正在使用以下代码将图像写入二进制文件: std::ofstream edgefile("C:\\****\\edge.bin", std::ofstream::binary | std::ofstream::app | std::ofstream::out); Mat edges; Canny(bilat, edges, cthr1, cthr2, 3); //cany sliders if (writeedge){ int rows = edges.rows
std::ofstream edgefile("C:\\****\\edge.bin", std::ofstream::binary | std::ofstream::app | std::ofstream::out);
Mat edges;
Canny(bilat, edges, cthr1, cthr2, 3); //cany sliders
if (writeedge){
int rows = edges.rows;
int cols = edges.cols;
edgefile.write(reinterpret_cast<const char *>(&rows), sizeof(int));
edgefile.write(reinterpret_cast<const char *>(&cols), sizeof(int));
edgefile.write(reinterpret_cast<char*>(edges.data), edges.rows*edges.cols*sizeof(uchar));
cout << "writen r:" << rows << "C: " << cols << "Bytes: " << edges.rows*edges.cols*sizeof(uchar) << endl;
}
std::ofstream edgefile(“C:\\**\\edge.bin”,std::ofstream::binary | std::ofstream::app | std::ofstream::out);
垫边;
Canny(bilat,edges,cthr1,cthr2,3)//藤条滑块
if(writedge){
int rows=edges.rows;
int cols=edges.cols;
write(reinterpret_cast(&rows),sizeof(int));
write(reinterpret_cast(&cols),sizeof(int));
edgefile.write(reinterpret_cast(edges.data),edges.rows*edges.cols*sizeof(uchar));
coutEOF位是在尝试读取文件末尾之后设置的,这就是流的工作方式
您可以轻松地重新构造主循环以在第一次读取后检查状态。这是因为read
的返回值是对流的引用,而将引用转换为bool
将检查流是否仍处于良好状态(即无EOF)
while(infle.read(reinterpret_cast(ptr)、sizeof(int)))
{
// ...
std::ifstream infile;
int main(int argc, char* argv[])
{
int * ptr;
ptr = new int;
int rows;
int cols;
infile.open("C:\\****\\edge.bin", std::ofstream::binary | std::ofstream::app | std::ofstream::in);
while (!infile.eof())
{
infile.read(reinterpret_cast<char*>(ptr), sizeof(int));
rows = *ptr;
infile.read(reinterpret_cast<char*>(ptr), sizeof(int));
cols = *ptr;
Mat ed(rows, cols, CV_8UC1, Scalar::all(0));
infile.read(reinterpret_cast<char*>(ed.data), rows * cols * (sizeof uchar));
cout << "writen r: " << rows << " C: " << cols << " Bytes: " << rows * cols * (sizeof uchar) << endl;
imshow("God Knows", ed);
cvWaitKey();
}
infile.close();
return 0;
}
while (infile.read(reinterpret_cast<char*>(ptr), sizeof(int)))
{
// ...