2011-09-25 4 views
1

다른 이름을 사용하여 여러 번 파일을 복사하려고했습니다.루프를 사용하여 여러 번 파일 복사 중. C/C++

프로그램이있다 : 두 개의 파일 중 하나가 소스이고, 다른 하나는 목적지 스트림있다 이것으로

#include<iostream> 
#include<cstdio> 
#include<cstdlib> 
#include <sstream> 
#include<cstring> 
using namespace std; 

main() 
{ 
    string text; 
    int i; 
    char ch; 
    ostringstream oss; 
    FILE *fp1,*fp2; 
    if((fp1=fopen("One Dollar.jpg", "rb"))==NULL) 
    { 
     cout<<"Error"; 
     exit(-1); 
    } 
    for(i=1; i<=5; i++) 
    { 
     oss << "C:\\5241 Dollar\\One Dollar " << i << ".jpg"; 

     text = oss.str(); 

     if((fp2=fopen(text.c_str(), "wb"))==NULL) 
     { 
      cout<<"Error "<<i; 
      exit(-1); 
     } 
     while(!feof(fp1)) 
     { 
      fread(&ch, 1, 1, fp1); 
      fwrite(&ch, 1, 1, fp2); 
     } 

     fclose(fp2); 

     /* for(int j=0;j<30000;j++) 
      for(int k=0;k<30000;k++) 
       if(k==3000) 
        cout<<k; */ 

    } 
    fclose(fp1); 
} 

.. I 이진 판독 모드에서 실제 파일 및 이진 쓰면 목적지 로케이션 방법. 나는 for 루프를 사용하여 작업을 수행했다. 그러나 루프가 두 번째로 반복되면 fp2의 파일 열기가 실패합니다. 출력이 나옵니다. 오류 2

어떻게 코드를 작동시킬 수 있습니까?

+0

오류가 무엇입니까? – Mark

+0

사실 그것은 오류가 아닙니다. 즉, 컴파일러가 오류를 표시하지 않습니다. 나쁜. 아마도 버그 일 겁니다 ... 두 번째로 출력이 나옵니다. 오류 2 if this : if ((fp2 = fopen (text.c_str(), "wb")) == NULL) – ponir

+0

@ user817824 내 응답을 업데이트했습니다. –

답변

3

루프의 각 반복에서 첫 번째 파일을 열고 닫아야합니다. 첫 번째 반복의 끝에서, 제 파일 포인터가 파일의 마지막이기 때문에

.... 
for(i=1; i<=5; i++) 
{  
    if((fp1=fopen("One Dollar.jpg", "rb"))==NULL) 
    { 
     cout<<"Error"; 
     exit(-1); 
    } 
.... 

이유는, 그래서 두 번째 반복에서 모든 데이터를 볼 수 없다. 파일을 닫은 후 다시 열어야합니다 (또는 seek을 사용하여 파일 앞부분으로 이동할 수 있지만 복사 및 붙여 넣기 이래로 간단한 변경 사항입니다)

EDIT : 새로운 질문 :

문자열 스트림을 재설정해야합니다. 열려는 두 번째 반복에서

C:\\5241 Dollar\\One Dollar 1.jpgC:\\5241 Dollar\\One Dollar 2.jpg 

유효하지 않은 문자입니다.

하나의 해결책은 루프에 ostringstream 선언을 가지고하는 것입니다

.... 
for(i=1; i<=5; i++) 
{  
    if((fp1=fopen("One Dollar.jpg", "rb"))==NULL) 
    { 
     cout<<"Error"; 
     exit(-1); 
    } 
    ostringstream oss; 
    oss << "C:\\5241 Dollar\\One Dollar " << i << ".jpg"; 
+0

이것은 다른 문제를 해결합니다. .. t가 아직 을 Thatnks을 고려 그러나 문제 나 남아 있고 있었다 출력에서 ​​ 내가 얻을 :. 의미 오류 2 이 의 경우 ((FP2 =하면 fopen (text.c_str(), "WB ")) == NULL) { COUT <<"오류 "<< I; 출구 (-1)]} . 는 두번째 반복에서 파일 개구 – ponir

+0

@use 실패 r817824 업데이트 됨 –

+0

이것은 완벽하게 작동합니다. : D – ponir

0
int main() 
{ 
    string text; 
    int i; 
    char ch; 
    ostringstream oss; 
    FILE *fp1,*fp2; 

    if((fp1=fopen("/home/maru/fact.cpp", "rb"))==NULL) 
    { 
     cout<<"Error"; 
     exit(-1); 
    } 

    for(i=1; i<=5; i++) 
    { 
     oss << "/home/maru/fact" << i << ".cpp"; 
     text = oss.str(); 

    rewind(fp1); 

    cout<<text<<"\n"; 

    if((fp2=fopen(text.c_str(), "wb"))==NULL) 
     { 
      cout<<"Error "<<i; 
      exit(-1); 
     } 

     while(!feof(fp1)) 
     { 
      fread(&ch, 1, 1, fp1); 
      fwrite(&ch, 1, 1, fp2);   
     } 

     fclose(fp2); 
     oss.str(""); 

    } 
    fclose(fp1); 
    return 0; 
} 
+2

당신의 해결책에 질문에 맞는 이유를 설명하기 위해 귀하의 대답에 또는 귀하의 소스 코드에 직접 의견을 추가하십시오. –

+1

또한 [왜 while (! feof (file)) "이 항상 잘못 되었습니까?] (http : // stackoverflow?com/questions/5431941/why-is-feof-file-always-wrong) 여러분이 올린 코드는'fp1'에서'fp2' * 두번 읽은 마지막 문자를 쓸 것입니다. –

관련 문제