그래도 std::fstream
에 관한 많은 정보를 찾았지만 여전히 작동 방법을 이해할 수 없습니다. 의이 최소한의 예를 보자 :이 작동하지 않습니다전체 파일을 읽은 다음 동일한 std :: fstream에서 모두 덮어 씁니다.
#include <fstream>
#include <string>
int main()
{
std::fstream fs{ "somefile.txt", std::fstream::out | std::fstream::in };
std::string line;
while (std::getline(fs, line))
{
// reads the whole file
}
// the purpose is to overwrite the whole file
fs.seekp(0, std::ios_base::beg); // moves at the beginning
fs << "Hello world!" << std::endl; // writes in the file
// possibly other read/write
}
, 하나가 먼저 읽은 후 내가 읽어 모든에 따라 동일한 스트림에 쓸 수없는 것 같다. 파일을 닫은 다음 std::ios_base::trunc
플래그으로 여는 방법으로 해결 방법을 알고 있습니다. 그러나 그것은 무의미한 것처럼 보입니다. 왜 그런 제한이 있습니까? 독서 후에 파일을 기술적으로 덮어 쓸 수는 없습니까?
어쩌면 당신은'eof' 비트를 지울 필요가 있습니다 –
이것은 문제가되지 않지만 여분의 것들이 필요하지 않는 한'std :: endl'을 사용하지 마십시오. '\ n '은 한 줄을 끝냅니다. –
@ForceBru 아무 것도 쓰지 않지만 파일의 수정 시간이 변경되지 않습니다. – Boiethios