2012-01-31 3 views
2

가능한 중복 :
Delete a Line from a file in C Language
In C++, what is the proper way to insert a line at the beginning of a text file?파일의 시작 부분에 데이터 추가

어떻게 내가 C/C++ 프로그래밍을 사용하여 파일의 시작 부분에 데이터를 추가 할 수 있습니까?

fstream file; 

stmt.open(L"d:\\xyz.txt",ios::in|ios::out|ios::app); 

을하지만,이 파일의 마지막에 추가된다 나는 다음 코드를 시도했다.

+0

전체 코드, 무작위하지 ​​라인을 게시하시기 바랍니다 작동한다면 모르겠어요 (http://sscce.org 참조). –

+0

프로그램이 필요하지 않거나 파일의 시작 부분에 이미 공간이 할당되도록 프로그램을 설계하는 것이 더 좋고 더 유리할 수 있습니다. –

+0

'ios :: app' 속성은 모든 쓰기를 파일 끝으로합니다. 처음에 글을 쓰고 싶으면 사용해서는 안됩니다. (그러나 다른 사람들이 지적했듯이 기존 데이터를 덮어 쓰거나 끝에 추가 할 수는 있지만 파일에 데이터를 삽입 할 수는 없습니다.) –

답변

3

당신은이 작업을 수행 할 수 있습니다 :

  • 가 이전 파일에서 데이터를 추가 상단
  • 에 새로운 데이터를 추가하여 새 파일을 만듭니다
  • cstdiorename있다

하지만, C++에 특정한 무언가가있을 것이라고 확신합니다.

+0

seekg()를 사용하지 않는 이유는 무엇입니까? –

+0

@AbhijeetRastogi 무엇을 의미합니까? – cnicutar

9

당신은 그렇게 할 수 없습니다.

표준 C 또는 C++ 만 있으면 원자 적으로 수행하려는 경우 모든 파일을 새 파일 (예 : 새 데이터와 이전 파일)에 쓰고 파일을 이동해야합니다. 위험한 방식으로 재생하려면 데이터 블록을 읽고 처음에 새 내용을 쓰고 블록 단위로 데이터를 옮깁니다 (하지만 방해가되면 파일을 파괴했습니다).

메모리 매핑에 액세스 할 수있는 경우 다른 방법을 시도해 볼 수 있습니다. 전체 파일을 메모리 맵핑하고 필요한 오프셋만큼 memmove을 매핑하고 새 데이터를 초기 세그먼트에 memcpy 삽입합니다.

1

내가 아는 한 파일을 여는 유일한 방법은 읽기, 쓰기 및 추가입니다. 따라서 전체 파일 내용 (거대한 파일이 아닌 경우)을 읽고 임시 파일을 작성한 다음 원하는 파일을 작성한 다음 이전 파일에서 읽은 버퍼를 작성해야합니다.

또한 w + 모드에서 파일을 열고 파일의 시작 부분에 커서를하려고 시도 할 수 있지만 불행히도

관련 문제