2012-09-02 3 views
1

그래, 어떻게해야할지 모르겠다. 나는 내가 바꾸고 싶은 선에 도착할 수 있었다. 그러나 나는 그것을 바꿀 방법을 모른다. C++ Fstream이 특정 라인을 대체합니까?

는 containts이 File.txt를라는 파일 말 :

1 
2 
3 
4 
5 

와 나는 4 대신 3의 난이 어떻게 할 수 말한다 그래서 3 호선을 대체 할?

#include <Windows.h> 
#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

fstream file; 
string line; 

int main(){ 
file.open("file.txt"); 
for(int i=0;i<2;i++){ 
getline(file,line); 
} 
getline(file,line); 
//how can i replace? 
} 
+0

줄 단위로 한 줄씩 읽고 그 줄을 다른 파일에 쓰는 것이 좋습니다 (대체 할 줄 포함) –

+0

어떻게할까요? 파일을 다시 만들지 않고 그대로 하시겠습니까? – Rapptz

+0

@Rapptz 다른 방법은 없습니다. 대체 할 라인이 교체 할 라인보다 큰 경우 어떻게해야합니까? 그러면 다음 줄을 덮어 씁니다. –

답변

5

당신은 당신이 현재의 위치로 추구를 포함하여, 구함으로써 읽기와 쓰기 사이를 전환 할 수 있습니다 읽기/쓰기 모드에서 파일을 열었습니다 가정하면. 그러나 작성된 문자는 기존 문자를 덮어 쓰며 새로운 문자는 삽입하지 않습니다. 예를 들어,이 다음과 같을 수 있습니다 :

std::string line; 
while (std::getline(file, line) && line != end) { 
} 
file. seekp(-std::ios::off_type(line.size()) - 1, std::ios_base::cur); 
file << 'x'; 

를 올바른 위치 추구에 있습니다 언 바운드 상태로 스트림을 넣어 필요한 경우에도 마찬가지입니다. 시크하지 않고 읽고 쓰기를 전환하려고하면 정의되지 않은 동작이 발생합니다.

+0

안녕하세요 선생님, 어떻게 내가 이것을 수정하고 이것을 작동시킬 수 있습니다. 고맙습니다! :) 오늘 seekp 사용법을 배웠습니다. – lolwut123

+0

그런데 왜 우리가 -line.size()를 사용하는지 모르겠다. – lolwut123

+0

음, 뒤로 이동해야한다. 양수 값은 현재 위치에 상대적으로 앞으로 이동하고, 음수 값은 뒤로 이동합니다. 사실, 코드는'std :: string :: size_type'이 그다지 좋지 않은 것으로 생각합니다 (여전히 작동해야합니다) :'-std :: ios :: off_type (line.size))'대신'-line.size()'를 사용한다. –

1

일반적인 접근 방식은 한 파일에서 다른 파일에 쓰는 동안 읽는 것입니다. 그렇게하면 대체 할 데이터와 크기가 같은지 걱정하지 않고도 원하는대로 바꿀 수 있습니다.

관련 문제