2014-03-06 3 views
1

클래스 프로젝트에서 작업하므로 fstream (입력/출력 모두), unique_ptr을 사용하고 고정 길이 직원 레코드를 쓰기위한 새 파일 만들기 (Employee의 EmployeeRec 구조체 사용) .fstream을 사용하여 파일에 쓰기

다음 작업을 수행 할 때 데이터가 실제로 쓰여지지 않습니다 ... 적어도 Visual Studio에서 스트림을 볼 때 스트림의 데이터를 표시하지 않으며 파일을 실제로 찾을 수 없습니다. 프로그램의 디렉토리. 컴파일은 잘되었지만 뭔가 빠져 있어야합니다. 어떤 아이디어?

적용 코드 : Employee.h에에서

: Employee.cpp에서

class Employee{ 
    int id; 
    std::string name; 
    double salary; 

    struct EmployeeRec{ // Employee file for transfers 
     int id; 
     char name[31]; 
     double salary; 
    }; 
void write(std::ostream&) const; 
}; 

: 내 주요 드라이버에서

// Write an Employee record to file 
void Employee::write(ostream& os) const{ 
    EmployeeRec outbuf; 
    outbuf.id = id; 
    strncpy(outbuf.name, name.c_str(), 30)[30] = '\0'; 
    outbuf.salary = salary; 
    os.write(reinterpret_cast<const char*>(&outbuf), sizeof outbuf); 
} 

:

// "employee.bin" does not exist prior 
// EmpVect is a vector of unique_ptr<Employee> that has a few Employees already stored 
fstream emprecs("employee.bin", ios::in | ios::out | ios::binary); 
for (size_t i = 0; i < EmpVect.size(); ++i){ 
    (EmpVect[i])->write(emprecs); 
} 

답변

0

일부 오류를 추가 점검 (ex is_open())하여 점검 파일이 실제로 열렸는지 여부. 당신이 권한을 가지고 있지 않기 때문에 파일이 생성되지 않을 가능성이있다 등

오류 설명을 사용하여 함수 strerror() 또한 http://www.cplusplus.com/reference/cstring/strerror/

은 ofstream를 보라를 얻을 수 있습니다. http://www.cplusplus.com/reference/ostream/ostream/?kw=ostream

+1

당신이 옳았습니다. 파일이 실제로 어떤 이유로 열리지 않았습니다. 이유는 모르겠지만, 명시 적으로 .open()을 호출하면 fstream에서이를 수정했습니다. 감사! – CGutz

0

int 멤버가 EmployeeRec 일 수 있습니까? const char *에 오프셋이 0 인 int가있는 구조체를 reinterpret_casting합니다. 실제 ID와 시스템의 엔디안 니스에 따라 EmployeeRec 구조체의 첫 번째 바이트가 0 일 가능성이 높습니다. 그런 다음 첫 번째 바이트가 Null 종결자인 Null 종료 C 문자열을 작성합니다.

+0

어쨌든'const char * '가 아닌 것을 const char *로 변환하기 위해 reinterpret_cast (아마도 가장 위험한 캐스트)를 사용하기 때문에 코드는 정의되지 않은 동작을합니다. –

+0

데이터의 주소를 가져 와서 char *로 캐스팅하면 바이너리로 쓸 수 있습니다. http://www.cplusplus.com/reference/ostream/ostream/write/에서 살펴보십시오. * 쓰기 *는 형식화되지 않은 데이터 블록을 기록합니다. –

+0

나는 고쳐졌다. 고맙습니다. 형식이 지정된 데이터를 작성하는 함수와 혼합했습니다. –

관련 문제