파일입출력을 이용하여 특정부분 수정하는게 잘안되는데요..
노랑이
질문 제목 : 파일입출력을 이용하여 특정부분 수정하는게 잘안되는데요..
현재 txt파일에
1,11
2,22
3,33
... 이런식으로 ,를 기준으로 데이터가 있는데요
,뒤에 있는 값만을 바꿔서 txt파일에 write를 하고 싶은데 어떤식으로 해야 하나요?
지금 fgets를 이용하여 한 라인의 값(1,11)의 값을 얻고 strtok를 이용하여 두개의 값을 구분하는것까지는
해보았는데요 두번째 내용만 수정하여 write를 하기 위해 간단한 방법이 있을까요?
-
스콜피온 2024-01-02
디스크에는 읽기 헤더와 쓰기 헤더가 각각 따로따로 있는데
fseek 함수는 읽기 헤더의 위치를 바꾸어주어서 읽는 위치를 빠르게 옮길 수 있습니다.
반대로 파일에 쓸때는 쓰려고 하는 내용을 처음부터 끝까지 모두 써야 됩니다. -
하늘 2024-01-02
저도 fgets, feek. fputs를 사용해서 저런식으로 테스트하고 있는데
이게 될듯 하면서 값이 써진것을 확인해보니 자릿수가 하나없거나..이상하게 쓰여지고 있어서 이상하네요.ㅠ -
갤1 2024-01-02
1, 11
2, 22
3, 33
이 있다면 11을 수정하고 싶을 때
fgets를 이용해서 한 line을 읽어서
fseek으로 -3또는 -4 (즉, 11의 앞자리 1에 커서가 이동되는 위치를 한번 찾아보시면 될거같네요)
이동 후에 fputs()함수를 이용해서 수정하면 될 거 같은데...
제가 지금 테스트를 해볼 수 없는 상황이어서요.
정확한 답변을 드리지 못해 죄송합니다.ㅠㅠ -
클 2024-01-02
특정부분을 수정하기 위해서는 새로덮어쓰는것밖에 없는건가요?
-
갅지돋는슬아 2024-01-02
파일입출력에서는 특정 부분만 수정하는 것이 불가능합니다. 변경된 내용 전체를 새로 써야 됩니다.
-
똘끼 2024-01-02
읔...이게 생각보다 잘안되네요;
fgets로 한 라인을 얻고
fseek로 = 다음(3)으로 이동후에 fputc로 했는데 내용이 삭제되고 이상해지네요;; -
아리솔 2024-01-02
일단 한 Line을 읽어서 구분하는거 까진 성공하셨다고 하셨으니
두 번째 11의 값을 수정 후 다시 파일에 write하기 위해
fseek함수를 이용해보시면 될 거 같습니다.