こんにちは、別のコードセットから作成したバイナリファイルを読み込もうとしています。 例バイナリファイルを作成するために、A.cppを使用し、例えばファイル別のコードセットで作成されたバイナリファイルを読み込むC++
を読むためにB.cppを使用して:私はA.で
struct assignment
{
char atitle [MAX];
int weight;
int markupon;
double marks;
};
struct subjects
{
char code [MAX];
char subtitle [MAX];
int NoOfTask;
assignment AStructure [MAX];
int finalmarks;
grades grade;
};
以下、下記の構造を使用してファイルを作成したA.cppで cpp私はファイル内にあるレコードの数を取得するために、次のコードを使用し、正常に動作します。 B.cppで
int getNoOfRecords (fstream& afile, char filename [])
{
afile.open (filename, ios::in | ios::binary);
if (!afile)
{
afile.close();
return 0;
}
// move read marker point to end of
// the last record
afile.seekg (0, ios::end);
int totalBytes = afile.tellg();
int noOfsubjects = totalBytes/sizeof (subjects);
afile.close();
return noOfsubjects;
}
私は、以下の構造
struct studentassignment
{
char atitle [MAXN];
int weight;
int markupon;
double marks;
};
struct studentsubjects
{
char code [MAXN];
char subtitle [MAXN];
int NoOfTask;
studentassignment AStructure [MAXN];
int finalmarks;
char grade [MAXN];
};*
を持っており、B.cppに私はレコード数が、結果のイム取得取得するために以下のコードを使用して、私が得るものと異なっていますA.cpp。例:A.cppに3セットのデータを入力します。B.cppから読み取ると、サイズは2にしかなりません。ファイルから読み込まれるデータも正しくありません。
int NoOfRecords (fstream& afile, char filename [])
{
afile.open (filename, ios::in | ios::binary);
if (!afile)
{
afile.close();
return 0;
}
afile.seekg (0, ios::end);
int totalBytes = afile.tellg();
int noOfsubjects = totalBytes/sizeof (studentsubjects);
afile.close();
return noOfsubjects;
}
間違っているか、別のcppファイルを使用してファイルを読み取る方法がありますか?
Im初心者はC++で何かが間違っていると私に教えてください。事前のおかげ
MVCE
A.cpp
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <iomanip>
using namespace std;
const int MAX = 80;
enum grades {HDist, Dist, Credit, Pass, Fail};
struct assignment
{
char atitle [MAX];
int weight;
int markupon;
double marks;
};
struct subjects
{
char code [MAX];
char subtitle [MAX];
int NoOfTask;
assignment AStructure [MAX];
int finalmarks;
grades grade;
};
int main()
{
afile.open ("filename.dat", ios::out | ios::binary);
afile.seekg (0, ios::end);
subjects s;
cout << "Subject Code: ";
cin >> s.code;
cout << "Subject Name: ";
cin.ignore();
cin.getline(s.subtitle, MAX);
cout << "No of assessment task: ";
cin >> s.NoOfTask;
cout << endl;
for (int i = 0; i < s.NoOfTask; i++)
{
cout << "Task " << i+1 << " information" <<endl;
cout << "Title: ";
cin.ignore();
cin.getline(s.AStructure[i].atitle, MAX);
cout << "Weight: ";
cin >> s.AStructure[i].weight;
cout << "Upon: ";
cin >> s.AStructure[i].markupon;
cout << endl;
s.AStructure[i].marks = 0;
total = total + s.AStructure[i].weight;
}
afile.write (reinterpret_cast <const char *>(&s), sizeof (subjects));
afile.close();
}
B.cpp
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <iomanip>
using namespace std;
const int MAXN= 80;
const int MAXN0= 10;
struct studentassignment
{
char atitle [MAXN];
int weight;
int markupon;
double marks;
};
struct studentsubjects
{
char code [MAXN];
char subtitle [MAXN];
int NoOfTask;
studentassignment AStructure [MAXN];
int finalmarks;
char grade [MAXN];
};
int NoOfRecords (fstream& , char []);
void getrecord(fstream& afile, char filename [] , int, studentsubjects);
int main()
{
fstream afile;
subjects b;
int size;
size = NoOfRecords (afile, "filename.dat");
cout << size << endl;
for (int i = 0; i < size; i++)
{
getrecord(afile, "filename.dat", i+1, b);
cout << b.code << endl;
}
}
int NoOfRecords (fstream& afile, char filename [])
{
afile.open (filename, ios::in | ios::binary);
if (!afile)
{
afile.close();
return 0;
}
afile.seekg (0, ios::end);
int totalBytes = afile.tellg();
int noOfsubjects = totalBytes/sizeof (studentsubjects);
afile.close();
return noOfsubjects;
}
void getrecord(fstream& afile, char filename [], int i, studentsubjectsb)
{
afile.open (filename, ios::in | ios::binary);
afile.seekg ((i) * sizeof (studentsubjects), ios::beg);
afile.read (reinterpret_cast < char *>(&b), sizeof (studentsubjects));
afile.close();
}
これは、[MVCE](http://stackoverflow.com/help/mcve)を提供するのに役立ちます –
@EdHealこんにちは私のポストplsを編集してください何か他に感謝する必要がある場合にお知らせください –
問題が多いmore –