从具有直接访问权限的文件中读取c ++

时间:2016-02-14 13:07:34

标签: c++

我是c ++的新手,我真的很困惑从文件中读取/写入我知道有两种类型的文件:连续访问和直接访问。我有一个名为的结构在学校描述科目并且有3个成员数据 - 名称(主题名称),标记和评论的调查。我必须创建具有直接访问(.dat文件)的文件,其中每个文件呈现一个带有标记的主题(如果它有多个)和主题的注释,所以如果我有5个不同的主题我必须有5个不同的.dat文件。我必须从.dat文件中读取并制作包含主题名称的1 .txt文件,所有用逗号分隔的标记和该主题的注释。我试图写一些东西,但是当我编译它时它不会发生任何它只能制作.dat文件,但它不会制作.txt文件?有人可以帮助我真的不明白为什么这不起作用。这是我的代码:

struct Survey{
string name;
int mark;
char comment[100];
};

void Outline(ostream& f,Survey &s){
 f << s.mark << setw(16) << s.comment << endl;
}

void create(ofstream& f){
Survey s[7] = { {"EAI", 5, "The_professor_is_dude!"},
                {"EAI" ,4 ,"Will_we_use_in_a_real_life?"},
                {"OOP", 5, "When_u_begin_to_do_projects_its_a_magical"},
                {"DIS" ,4, "I_know_only_integrals"},
                {"OOP", 6 ,"Its_a_little_interesting."},
                {"DIS", 3 , "Its_a_hell"},
                {"UP" ,2 ,"I_don't_understand_anything"} };
string fname;
string tmp = ".dat";
string a[4] = {"UP", "OOP", "DIS", "EAI" };
for(int j=0;j<4;j++){
    fname = a[j] + tmp;
    f.open(fname, ios::ate);
       int k = 0;
       for(int i=0;i<7;i++){
        if(fname.compare(s[i].name) == 0){
         f.seekp(k*sizeof(Survey));
         f.write(reinterpret_cast<const char*>(&s[i]),sizeof(Survey));
         k++;
     }
   }
   f.close();
  }
}

void TextFile(){
ofstream outf("print.txt");
ifstream f;
string a[4] = {"UP", "OOP", "DIS", "EAI" };
string name;
string tmp = ".dat";
Survey s;
for(int i=0;i<4;i++){
   name = a[i] + tmp;
   f.open(name, ios::in);
   f.seekg(0);
   f.read(reinterpret_cast<char*>(&s),sizeof(Survey));
   while(f.good()){
    Outline(outf,s);
    f.read(reinterpret_cast<char*>(&s),sizeof(Survey));
   }
   f.close();
}
}

0 个答案:

没有答案