덮어쓰기로 Boost::filesystem copy_file을 수행하는 방법
-
06-07-2019 - |
문제
윈도우 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
좋은 생각이에요.