Windows API函数CopyFile
有一个参数BOOL bFailIfExists
,它允许您控制是否要覆盖目标文件(如果它存在)。
boost::filesystem
copy_file
函数没有这样的参数,如果目标文件存在,该函数将失败。有没有一种优雅的方法来使用boost copy_file函数并覆盖目标文件?或者直接使用Windows API更好?我目前的目标平台是Windows,但我更喜欢在可能的情况下使用STL和boost来保持代码的平台无关性。
谢谢。
发布于 2010-04-27 07:25:39
boost::filesystem::copy_option::overwrite_if_exists还有第三个枚举参数给copy_file
copy_file(source_path, destination_path, copy_option::overwrite_if_exists);
https://www.boost.org/doc/libs/1_75_0/libs/filesystem/doc/reference.html
发布于 2010-11-16 22:32:22
当心使用copy_option::overwrite_if_exists的boost::copy_file!如果目标文件存在并且小于源文件,则该函数将仅覆盖目标文件中的第一个大小(From_file)字节。
至少对我来说,这是一个警告,因为我假定copy_option::overwrite_if_exists会影响文件,而不是内容
发布于 2009-05-06 13:17:09
首先测试目标文件是否存在,如果存在,则将其删除:
if (exists (to_fp))
remove (to_fp);
copy_file (from_fp, to_fp);
或者,如果您担心文件会出现在测试和副本之间,那么您可以写入一个临时文件,然后将其重命名为目标文件。
https://stackoverflow.com/questions/829468
复制相似问题