나는 C로 파일에 데이터를 쓰고있다. 내가 지금 쓰고있는 것보다 길 경우를 대비하여 파일에 쓰여진 이전 텍스트를 지우고 싶다. 파일 크기를 줄이거 나 끝날 때까지 자릅니다. 어떻게해야합니까?C에서 파일을 자르는 방법?
답변
이 더 헤더 <unistd.h>
없다하지만 아직이 0 바이트 크기의 파일을 자릅니다
_chsize(fileno(f), size);
이것은 운영 체제의 기능입니다. 표준 POSIX 방법은 다음과 같습니다 :
open("file", O_TRUNC | O_WRONLY);
을 사용하여 파일을자를 수 있습니다. – chmike
전체 파일을 자르려면 파일을 열어서 쓰면됩니다. 그렇지 않으면 파일을 열어 읽기 위해 열어두고 임시 변수에 보관하려는 파일의 부분을 읽은 다음 필요한 곳으로 출력해야합니다. 파일의
FILE *file = fopen("filename.txt", "w"); //automatically clears the entire file for you.
자르기 부분 :
FILE *inFile("filename.txt", "r");
//read in the data you want to keep
fclose(inFile);
FILE *outFile("filename.txt", "w");
//output back the data you want to keep into the file, or what you want to output.
이것은 매우 비효율적 인 방법입니다. @ 조나단 Leffler의 방법이 훨씬 더 바람직합니다, 그리고 귀하의 플랫폼이 그것을 허용하지 않는 경우, 적어도 쓰기/이름 바꾸기 사이클, 충돌의 경우 dataloss을 방지하기 위해 (임시 이름 아래에 새로운 파일에 데이터를 복사 한 다음 이름을 바꿉니다 (가능하면 원자 적으로) 이전 파일을 삭제하십시오. – derobert
< 편집 >
아, 당신은 당신의 게시물을 편집, 당신은 C를 사용하고
전체 파일을 잘라 내기 파일을 열 때 "w +"모드로 파일을 열면 쓰기가 가능하도록 파일이 자릅니다.
FILE* f = fopen("C:\\gabehabe.txt", "w+");
fclose(file);
</편집 >
C++에서 파일을 절단하려면, 당신은 단순히 을 사용하여 파일에 ofstream 객체를 생성 할 수 있습니다 ios_base :: TRUNC 파일 모드를 절단하는 등, 그래서 같은 :
ofstream x("C:\\gabehabe.txt", ios_base::trunc);
fopen은 "gabehabe.txt"파일의 내용을 잘라내서 파일 포인터를 시작 부분에 맞 춥니 다. 그러나 파일 포인터를 재배치하기 전에 파일 내용을 비 웁니까? – Arpith
당신이 어떤 길이로 파일을 백업의 이전 내용을 보존하려는 경우 (다른 답변이 제공하는 0보다 큰 길이), P OSIX는 작업에 대해 truncate()
및 ftruncate()
기능을 제공합니다.
#include <unistd.h>
int ftruncate(int fildes, off_t length);
int truncate(const char *path, off_t length);
이 이름은 파일의 길이를 줄이는 주된 목적을 나타냅니다. 그러나 지정된 길이가 이전 길이보다 긴 경우 파일은 새 크기로 커집니다 (제로 패딩). ftruncate()
은 FILE *
이 아닌 파일 설명자에서 작동합니다. 당신은 사용할 수 있습니다
if (ftruncate(fileno(fp), new_length) != 0) ...error handling...
그러나 파일 스트림 (FILE *
) 및 파일 기술자 단일 파일 (int
) 액세스를 혼합하는 것은 혼란을 야기하는 경향이 있음을 알고 있어야합니다 - 몇 가지 문제에 대한 의견을 참조 . 이것은 최후의 수단이되어야합니다.
오픈 소스를 잘라내는 것이 모두 필요한 경우 일 수 있습니다. 그렇기 때문에 다른 사람이 제공 한 옵션으로 충분할 수 있습니다. 이 UNIX의 몇 가지 맛으로 실행하는 경우
앞으로 2 분 ... 좋은! –
현저하게 유사한, Lance! 적어도 우리 중 하나가 정보를 정확하게 얻었습니다. (
C++에서 2003과 같은 함수가 있습니까? 찾을 수 없습니까? 포함하지 않았 으면 어쩌면 도움이 되었습니까? w를 사용하여 파일을 열지 않고 이미 열려있는 파일을 사용합니다. – sofr
, 이러한 API를 사용할 수 있어야 : 내 리눅스 박스에 "남자 잘라 내기"에 따르면
#include <unistd.h>
#include <sys/types.h>
int truncate(const char *path, off_t length);
int ftruncate(int fd, off_t length);
는, 이러한 POSIX-준수합니다. 현재 길이보다 큰 길이를 전달하면 이러한 호출은 실제로 파일 크기 (!)를 증가시킵니다.Windows 시스템에서
- 1. C에서 파일을 시작하는 방법
- 2. C에서 파일을 삭제하는 방법 #
- 3. .net에서 날짜를 자르는 방법?
- 4. RichTexBox 텍스트를 자르는 방법
- 5. HWND 제목을 자르는 방법
- 6. 공백없이 문자열을 자르는 방법
- 7. 티파니에서 직사각형을 자르는 방법?
- 8. 양면에서 6 % 자르는 방법?
- 9. NSString을 자르는 방법?
- 10. .NET에서 배열을 자르는 방법?
- 11. codeigniter에서 이미지를 자르는 방법?
- 12. 텍스트를 자르는 방법?
- 13. C에서 잘린 파일을 검색하는 방법
- 14. C에서 XML 파일을 해독하는 방법
- 15. C에서 로그 파일을 작성하는 방법
- 16. 파일을 Java에서 자르는 것을 중지 하시겠습니까?
- 17. 끝에서 X 바이트 파일을 자르는 방법은 무엇입니까?
- 18. gif 이미지의 일부분을 자르는 방법?
- 19. 다른 모양으로 UIImageView를 자르는 방법
- 20. 플러그인없이 jQuery로 이미지를 자르는 방법
- 21. MATLAB : 이미지에서 원을 자르는 방법
- 22. 그림을 같은 부분으로 자르는 방법?
- 23. 검출 후 얼굴을 자르는 방법
- 24. URL에서 공백을 필터하거나 자르는 방법
- 25. 안드로이드 캔버스에서 사각형을 자르는 방법
- 26. Informix : dbexport를 가져올 때 테이블을 자르는 방법
- 27. C에서 Open Excel 파일을 읽는 방법
- 28. Objective-C에서 #import가 파일을 검색하는 방법
- 29. Objective-c에서 URL의 파일을 저장하는 방법
- 30. C에서 비밀번호로 보호 된 파일을 만드는 방법
64 비트 용 _chsize_s : _chsize_s (_fileno (f), size); – Gyuri
FILE 구조체를 사용하면 _fileno 함수가 실제로 도움이됩니다. – Carthi
MS-Windows 전용 함수가 아닙니다. –