2012-03-16 8 views
-3

파일의 데이터 (지정된 크기까지)를 다른 파일에 저장하는 방법. 파일 A의 총 크기가 10KB 인 것처럼 파일 X에 3KB를 저장하고 다른 파일 Y에 나머지 7KB를 저장하려고합니다. C++에서 어떻게 할 수 있습니까? 나는 초심자이므로 나와 함께 감내하십시오.크기에 따라 파일을 분할하는 방법은 무엇입니까?

참고 : 모든 읽기 및 쓰기는 바이너리 모드로 수행됩니다!

+1

을 한거야? 어디에서 고군분투하고 계십니까? – karlphillip

답변

0

그렇게하는 것은 매우 어렵고 복잡합니다. 어쨌든이 작업을 수행하는 단계는 파일을 바이너리 모드 (예 : 문자가 X 비트)로 열어 파일의 문자 수를 계산하는 것입니다 (o = n, 복잡성 = n을 이해하지 못하면 그 의미 그것을 끝내려면 N (문자 수) 단계를 취할 것입니다. 그런 다음 해당 숫자에 대해 수학 연산을 수행 한 다음 각 문자를 특정 숫자에 도달 할 때까지 루프의 다른 파일로 "이동"하는 루프를 만듭니다 300, 예를 들어 1000 자). 새 파일에는 처음 300 개가 있고 이전 파일에는 700 개 문자가 있습니다. 아주 쉽게는이 같은

0

사용 무언가 :) 것을 원하는 경우 코멘트 그렇게 요구, 코드에서 수행 할 : 물론

FILE *f1 = fopen("file1.txt", "rb"); 
// assuming size of f1 to be 10*1024 bytes 
FILE *f2 = fopen("file2.txt", "wb"); 
for(int i=0;i<3*1024;++i) fputc(fgetc(f1),f2); 
fclose(f2); 
FILE *f3 = fopen("file3.txt", "wb"); 
for(int i=0;i<7*1024;++i) fputc(fgetc(f1),f3); 
fclose(f3); 
fclose(f1); 

는,이 코드는 가정을 많이 만들고, 당신이 필요합니다 적절한 보호 코드 (예 : EOF 고려)가있는 항목을 구현합니다. 가 가능한 경우

+0

이것은 C++보다 C에 더 가깝습니다. 한 번에 한 문자 씩 데이터를 복사하기 때문에 오히려 비효율적입니다. –

+0

나는 동의하지만 그는 초심자 였다고 말한다. –

+0

정확히 * * 그가 초보자이기 때문에 짧지 만 관용적 인 해결책을 찾으려고합니다. –

2

, 당신은 함께 스트림 iteratorsstd::copy_nstd::copy을 사용할 수 있습니다 : 당신은 지금까지 무엇을

std::ifstream input_file; 
std::ofstream output_file_1; 
std::ofstream output_file_2; 

// ... 

auto input_iterator = std::istream_iterator<char>(input_file), 
// Copy 3k to first file 
std::copy_n(input_iterator, 
      3072, 
      std::ostream_iterator<char>(output_file_1)); 

// Copy the remaining to the second file 
std::copy(input_iterator, 
      std::istream_iterator<char>(), 
      std::ostream_iterator<char>(output_file_2)); 
+0

입력 파일에 대한'istream_iterator'를 변수에 저장하고 두 번째'std :: copy' 호출에서 그것을 재사용하면 (그리고 현재 위치!)'3027'을 복제하지 않아도됩니다. –

+0

@FrerichRaabe 감사합니다. 답변을 업데이트했습니다. –

관련 문제