2010-05-04 4 views
2

Visual C++를 사용하고 있습니다. 이 파일의 내용을 다른 파일에 복사하는 방법은 무엇입니까?Visual C++에서 파일을 복사하는 방법?

UINT32 writeToLog(wstring log) 
{ 
    wfstream file1 (LOG_FILE_NAME, ios_base::out); 
    file1 << log;  
    file1.close(); 

    // want to copy file1 to file2 

    return 0; 
} 

답변

11

정확히 무엇을하고 싶습니까? 데이터 복사본이 필요하면 다시 읽고 다시 쓸 수 있습니다. 실제로 파일 사본이 필요하면 OS 특정 호출을 사용해야합니다. 많은 경우에

, 파일 데이터를 읽고 다음 다른 파일로 다시 작성하는 것은 사본에 가까운만큼 근사 -이 같은 : 그러나

ifstream file1(...); 
ofstream file2(...); 
std::copy(istream_iterator<char>(file1),istream_iterator<char>(),ostream_iterator<char>(file2)); 

정말 사본 아니다 - 동일한 내용의 새 파일을 만듭니다. 하드 링크 나 심볼릭 링크를 올바르게 처리하지 못해 메타 데이터를 올바르게 처리하지 못하며 default file stream 만 '복사'합니다.

Windows에서 파일 복사가 필요한 경우 정확한 요구 사항에 따라 CopyFile, CopyFileEx 또는 CopyFileTransacted 중 하나를 호출해야합니다.

+1

나는 파일 복사와 데이터 복사 사이의 구별을 좋아한다. 이것은 내가 수년 동안 내 직감으로 알고있는 것이지만, 그렇게 명확하게 펼쳐진 것을 본 적이 없다. 신의 직업! –

+0

위 코드는 저에게 적합하지 않았습니다. 아래 내 대답보기 ... –

3

표준 C++에는 파일을 메모리로 읽어 들이고 다른 파일로 다시 쓰는 기능 외에 파일 복사 기능이 없습니다. Windows를 사용함에 따라 CopyFile 기능을 사용할 수 있습니다. 다른 OS에는 비슷한 OS 고유 기능이 있습니다.

0

위의 코드는 Joe Gauterin이 나를 위해 작동하지 않았습니다. .tga 이미지 파일을 복사하려 했으므로 istream_iterator<char>에 대한 내용이 망쳐 버렸습니다. 대신 나는 다음을 사용했다 :

ifstream file1(...); 
ofstream file2(...); 
char ch; 
while(file1 && file1.get(ch)) 
{ 
    file2.put(ch); 
} 
관련 문제