문제

윈도우 API 함수 CopyFile 논쟁이 있다 BOOL bFailIfExists 이를 통해 대상 파일이 존재하는 경우 해당 파일을 덮어쓸지 여부를 제어할 수 있습니다.

그만큼 boost::filesystem copy_file 함수에는 그러한 인수가 없으며 대상 파일이 존재하면 실패합니다.Boost copy_file 함수를 사용하고 대상 파일을 덮어쓰는 우아한 방법이 있습니까?아니면 단순히 Windows API를 사용하는 것이 더 낫습니까?현재 대상 플랫폼은 Windows이지만 코드 플랫폼을 독립적으로 유지하기 위해 가능한 경우 STL 및 부스트를 사용하는 것을 선호합니다.

감사합니다.

도움이 되었습니까?

해결책

세 번째가 있습니다 열거적 copy_file에 대한 논쟁, 부스트 :: fileSystem :: copy_option :: orverwrite_if_exists

copy_file(source_path,destination_path,copy_option::overwrite_if_exists);

다른 팁

copy_option :: orverwrite_if_exists를 사용하여 boost :: copy_file을 조심하십시오! 대상 파일이 존재하고 소스보다 작은 경우, 함수는 대상 파일의 첫 번째 크기 (From_File) 바이트 만 덮어 씁니다.

적어도 나에게는 copy_option :: orverwrite_if_exists가 영향을받는 것으로 추정 된 이후로 이것은 경고였습니다. 파일 그리고 아닙니다 콘텐츠

대상 파일이 먼저 존재하는지 테스트 한 다음 제거하십시오.

if (exists (to_fp))
    remove (to_fp);
copy_file (from_fp, to_fp);

또는 테스트와 사본 사이에 나타나는 파일이 걱정되면 임시 파일에 작성한 다음 대상 파일로 이름을 바꿀 수 있습니다.

Boost copy_file 함수를 사용하고 대상 파일을 덮어쓰는 우아한 방법이 있습니까?

분명히 이를 수행하는 직접적인 API는 없습니다.

아니면 단순히 Windows API를 사용하는 것이 더 낫습니까?현재 대상 플랫폼은 Windows이지만 코드 플랫폼을 독립적으로 유지하기 위해 가능한 경우 STL 및 부스트를 사용하는 것을 선호합니다.

문서에서:

기술 보고서 ​​2에 Boost.Filesystem을 포함하겠다는 제안인 N1975가 C++ 표준 위원회에서 승인되었습니다.Boost.Filesystem 라이브러리는 TR2 프로세스를 통해 작동하면서 TR2 파일 시스템 제안과 일치하게 유지됩니다.그러나 Boost.Filesystem과 TR2 제안 간에는 네임스페이스와 헤더 세분성이 다릅니다.

이는 다음을 고수하는 것을 강력히 시사합니다. boost::filesystem 좋은 생각이에요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top