我试图从文本文件中读取前121个字节到结构上。
这是我的代码。
#include <fstream.h>
#include <iostream.h>
#include <conio.h>
#include <sys/stat.h>
int main()
{
struct
{
char map[121];
} map_data;
struct stat results;
fstream myfile("input.txt", ios::in);
myfile.read((char *)&map_data,121);
if(!myfile)
{
cout<<"Unable to open the file";
}
if(!myfile.read((char *)&map_data,121))
{
cout<<"Second error occurred";
}
myfile.close();
cout<<"\n Here are the read contents of size "<<sizeof(map_data)<<"\n";
fstream outfile("output.txt", ios::out);
for(int i=0;i<121;i++)
{
cout<<map_data.map[i]<<" ";
}
outfile.write((char *)&map_data,121);
outfile.close();
stat("input.txt",&results);
cout<<"\n Size of input.txt "<<results.st_size;
stat("output.txt",&results);
cout<<"\n Size of output.txt "<<results.st_size;
getch();
}
问题是上面的代码跳过了文件的第一个字符,即hello的h。它的cout和output.txt文件都显示了这个东西。
有人可以指导我如何解决这个问题吗?
答案 0 :(得分:1)
我按照指南courses.cs.vt.edu/cs2604/fall02/binio.html
进行了操作该示例显示了两种不同的方式来读取文件,注意示例之间的 ... 。
它还说 // Same effect as above
所以只需注释掉两个读取调用中的任何一个。
fstream myfile("input.txt", ios::in);
//myfile.read((char *)&map_data,121);
if(!myfile.read((char *)&map_data,121))
{
cout<<"Second error occurred";
}
答案 1 :(得分:0)
我很惊讶只有第一个角色丢失了。它应该缺少121个字符。
fstream myfile("input.txt", ios::in);
// you read 121 bytes here...
myfile.read((char *)&map_data,121);
if (!myfile) {
cout<<"Unable to open the file";
}
// and then do it again here, before you ever look at `map_data`.
if (!myfile.read((char *)&map_data,121)) {
cout<<"Second error occurred";
}