나는 Stack Overflow와 파일에 벡터를 작성하는 다른 많은 사이트에 관한 글을 읽었다. 나는 일하고 있다고 느끼는 것을 구현했지만 몇 가지 문제가 있습니다. 구조체의 데이터 멤버 중 하나는 클래스 문자열이며 벡터를 다시 읽을 때 해당 데이터가 손실됩니다. 또한 첫 번째 반복을 작성한 후 추가 반복을 수행하면 malloc 오류가 발생합니다. 원하는 코드를 파일에 저장 한 다음 프로그램을 다시 시작할 때 다시 읽으려면 아래 코드를 어떻게 수정하면됩니까? 현재, 데이터 멤버 만 벡터 인 클래스의 소멸자에 쓰는 생성자에서 읽기가 수행되지만 해당 벡터를 조작하는 메서드가 있습니다.구조체의 벡터를 읽고 파일에 쓰는 것
여기 내 읽기/쓰기 방법의 요지가 있습니다.
이ifstream infile;
infile.open("data.dat", ios::in | ios::binary);
infile.seekg (0, ios::end);
elements.resize(infile.tellg()/sizeof(element));
infile.seekg (0, ios::beg);
infile.read((char *) &elements[0], elements.capacity()*sizeof(element));
infile.close();
쓰기 :
ofstream outfile;
outfile.open("data.dat", ios::out | ios::binary | ios_base::trunc);
elements.resize(elements.size());
outfile.write((char *) &elements[0], elements.size() * sizeof(element));
outfile.close();
구조체 요소 :
C에서struct element {
int id;
string test;
int other;
};
당신이 사용하는 C++ 학습 자료에서 이런 식으로 파일 액세스를 했습니까? –
이것은 fstream을 사용하여 벡터 데이터를 파일로 읽고 쓰는 것을 요구하는 과제물의 일부입니다. 클래스의 파일에 복잡한 벡터 쓰기 작업을 다루지 않았기 때문에 fstream 문서 등을 읽고 온라인에서 예제를 살펴 보았습니다. 바이너리로 쓰는 것이 가장 쉬운 방법이라고 생각했습니다. 크기 조정과 같은 특정 사항은 파일 크기를 제한하기 위해 수행 한 작업이었습니다. 우리에게는 수업을위한 공식 서적이나 자료가 없습니다. 우리는 온라인 노트를 가지고 있지만, 필요한 정보를 구현하는 데 필요한만큼 상세하지 않습니다. –
문자열을 문자 배열로 변경하고 해당 변경을 지원하기 위해 코드의 다른 부분을 약간 수정하기로 결정했습니다. 문자열 대신 문자 배열로 전환하면 위의 코드가 잘 작동하는 것 같습니다. –