2015-10-06 55 views
2

我正在编写一个读取和写入学生使用类的记录的程序。这个程序不打开文件。所以我无法从文件中读取数据。以下代码是文件读/写在单个文件中。但此代码无法创建文件

class Student 
{ 
    private: 
     unsigned roll ; 
     char name[30]; 
     float perc; 

    public: 
     void getvalue() 
     { 
     cout<<"enter rollno , name and percentage :\n"; 
     cin>>roll; 
     cin.ignore(); 
     cin>>name>>perc; 
     } 

     void display() 
     { 
     cout << "\nRoll No : " << roll << "\nName : " << name 
      << endl << "percentage : " << perc << endl; 
     } 
}; 

int main() 
{ 
    char choice; 
    Student st ; 
    fstream file1; 

    file1.open("stud_rec1.bin", ios::binary|ios::in|ios::out); 
    do 
    { 
     cout<<"\n Detail of student :\n"; 
     st.getvalue(); 

     file1.write((char*)(&st) , sizeof(st)); 

     cout<<"\nwant to input more record(y/n) : "; 

     cin>>choice; 

    } while(tolower(choice) == 'y'); 

    file1.seekg(0,ios::beg); 

    while(file1.read((char*)(&st) , sizeof(st)) ) 
    { 
     cout<<"1"; 
     st.display(); 
    } 

    file1.close(); 

    getch(); 
} 
+0

请经常检查你文件之前的任何其他文件操作 – TryinHard

回答

0

当你调用fstream::open()设置为ios::out|ios::in模式,该文件只能在文件存在打开。如果文件不存在,fstream::open()失败。见http://en.cppreference.com/w/cpp/io/basic_fstream/open和相关的http://en.cppreference.com/w/cpp/io/basic_filebuf/open

变化

file1.open("stud_rec1.bin", ios::binary|ios::in|ios::out); 

file1.open("stud_rec1.bin", ios::binary|ios::in|ios::out); 
if (!file1.is_open()) 
{ 
    file1.clear(); 
    file1.open("stud_rec1.bin", ios::out); //Create file. 
    file1.close(); 
    file1.open("stud_rec1.bin", ios::binary|ios::in|ios::out); 

    // If the file still cannot be opened, there may be permission 
    // issues on disk. 
    if (!file1.is_open()) 
    { 
     std::cerr << "Unable to open file " << "stud_rec1.bin" << std::endl; 
     exit(1); 
    } 
} 
+0

感谢ü先生您的快速反应成功与否打开。我非常感谢你的姿态。 –