답변
간단히 말해서, 대부분의 파일 시스템은 그런 작업을 지원하지 않습니다.
두 가지 선택 사항이 있습니다. 분명한 것은 데이터의 복사본을 만들어 원하지 않는 부분을 남기지 않는 것입니다. 현재 위치에서 (즉, 같은 파일에서 데이터를 이동하는 등) 또는 보조 파일을 사용하여 데이터를 새 파일로 복사 한 다음 새 파일의 이름을 이전 이름으로 바꾸는 것과 같은 작업을 수행 할 수 있습니다.
다른 주요 선택은 단순히 파일과 데이터를 재구성하여 이전 데이터를 전혀 제거 할 필요가 없도록하는 것입니다. 예를 들어 프로세스에서 가장 최근 N 개의 데이터 양을 유지하려는 경우 파일의 대부분을 원형 버퍼로 구조화 할 수 있습니다. 처음에는 몇 개의 "포인터"를 사용하여 헤드 및 테일 포인트를 알려줍니다 , 데이터를 읽고 쓰는 위치를 알 수 있습니다. 이와 같은 구조에서는 이전 데이터를 지우거나 제거하지 않고 필요에 따라 덮어 씁니다.
메모리가 충분하면 내용을 메모리로 완전히 읽고 파일 앞쪽으로 다시 복사 한 다음 파일을 자릅니다.
메모리가 충분하지 않은 경우 파일을 자르면 블록으로 복사하십시오.
하지만 파일이 너무 커서 메모리에 복사 할 수 없을 수도 있습니다. 차단 시간이 오래 걸릴 수도 있습니다. –
블록 메모리를 읽을 때 메모리는 문제가되지 않습니다. 시간 문제는 메모리가 아니라 I/O입니다. 파일이 클수록 프로세스가 길어집니다. – Grzegorz
예, 가능하지만 여전히 대부분의 파일을 다시 작성해야합니다.
open the file
beg = find the start of the fragment to be removed
len = length of the fragment to be removed
blocksize = 4096 -- example block size, may be any
datamoved = 0
do {
fseek(pos +len +datamoved);
if(endoffile) return; -- finished!
actualread = fread(buffer, blocksize)
fseek(pos + datamoved)
fwrite(buffer, actualread)
datamoved += actualread
}
를 루프 후, 마지막 단계는 '잘라 내기'는 POS + datamoved 크기로 파일입니다 다음과 같이
거친 좋습니다. 기본 파일 시스템이 'truncatefile'작업을 처리하지 않으면 다시 작성해야하지만 .. 대부분의 파일 시스템과 라이브러리가이를 지원합니다.
참고 : 기존의 HDD 또는 Floppys 또는 ZIP 드라이브 등에서 파일 조각을 삭제하면 파일을 새 파일로 다시 쓰는 것보다 속도가 훨씬 느릴 수 있습니다. 왜냐하면 탐색을 다시 시도하면 드라이브 헤드가 잘 움직일 수 있기 때문입니다. 5 월이지만 그렇게 할 필요는 없습니다. 또한 특정 파일 시스템에 코드를 바인딩 할 수있는 경우 파일 중간에서 BLOCK/INODE를 실제로 삽입/재정렬/제거 할 수있는 저수준 작업을 발견 할 수 있습니다. 그런 다음 적은 양의 데이터 만 이동하면됩니다 ,하지만 그건 꽤 복잡한 일입니다 .. – quetzalcoatl
- 1. C에서 파일을 자르는 방법?
- 2. Eclipse를 사용하지 않고 .apk 파일을 만드는 방법
- 3. MSI 파일을 사용하지 않고 설치 (* .exe) 파일을 실행하는 방법?
- 4. 비트 맵 파일을 읽고 나서 자르는 방법?
- 5. 끝에서 파일을 자르는 방법? (크로스 플랫폼)
- 6. 임시 파일을 사용하지 않고 스크립트를 다시 작성하도록
- 7. 파일을 사용하지 않고 IIS7에 ASP.NET 사이트 재배포하기
- 8. FileReference.browse()를 사용하지 않고 파일을 서버에 업로드
- 9. 모듈을 사용하지 않고 Excel 파일을 읽으십시오.
- 10. 임시 파일을 사용하지 않고 파일 정렬
- 11. 플래시를 사용하지 않고 .sol 파일을 작성하려면 어떻게해야합니까?
- 12. Google 번역사 키트를 사용하지 않고 여러 HTML 파일을 번역하는 방법
- 13. 파일을 복사하고 PHP를 사용하여 dataloss없이 원본을 자르는 방법
- 14. Microsoft.Office.Interop.Excel 라이브러리를 사용하지 않고 C#으로 Excel 파일을 읽는 방법
- 15. OnCompletionListener()를 사용하지 않고 오디오 파일을 동적으로 재생하는 방법
- 16. Objective-C : NIB 파일을 사용하지 않고 버튼으로 변환하는 방법?
- 17. 컴퓨터를 사용하지 않고 장치에서 내 db 파일을 읽는 방법
- 18. 파일을 탐색하지 않고 파일을 업로드하려면 어떻게해야합니까?
- 19. 끝에서 X 바이트 파일을 자르는 방법은 무엇입니까?
- 20. 파일을 쓰지 않고 다른 사람들과 웹 프로젝트 작업을하는 방법 등
- 21. 원래 php.ini 파일을 수정하거나 htaccess를 사용하지 않고 php.ini 설정을 변경하십시오.
- 22. 화살표 키를 사용하지 않고 vim 퍼지 파인더에서 파일을 선택 하시겠습니까?
- 23. 파일을 Java에서 자르는 것을 중지 하시겠습니까?
- 24. 여러 파일을 업로드하고 JCrop으로 자르는 방법은 무엇입니까?
- 25. 다른 모양으로 UIImageView를 자르는 방법
- 26. 전체 파일을 메모리에로드하지 않고 XML 파일을 업데이트하는 방법
- 27. iframe을 사용하지 않고 다른 페이지를 빠르게로드하는 방법
- 28. 기존 파일을 덮어 쓰지 않고 파이썬으로 파일을 만드는 방법
- 29. 다른 파일을 만들지 않고 두 파일 결합하기
- 30. 논리 파일을 변경하지 않고 다른 모듈을로드하십시오.
RAM을 사용 하시겠습니까? 나는 구멍 파일 0.5 개를 메모리에 읽고, 삭제하고, 다시 읽은 데이터 0.5 개를 쓸 수 있었다. –
나는 그것이 OP가 피하려고하는 것이라고 생각합니다. – jrok
짧은 대답 : 아니요, (적어도 대부분의) 파일 시스템은이를 지원하지 않습니다. 당신이 할 수있는 일은 당신이 원하지 않는 부분을 남겨 놓는 (동일하거나 다른 파일에) 복사본을 만드는 것입니다. –