diff options
author | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-18 17:13:03 +0000 |
---|---|---|
committer | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-18 17:13:03 +0000 |
commit | 1b6462cde9859ae75da58fc1a566e272a381fd0b (patch) | |
tree | f7f08c70aa68c9bf39ecaa7d2eb5228db1a43b92 /base/file_util_win.cc | |
parent | c6d705d0c659bbd9b8f5b59ab3ab79dbd07dc242 (diff) | |
download | chromium_src-1b6462cde9859ae75da58fc1a566e272a381fd0b.zip chromium_src-1b6462cde9859ae75da58fc1a566e272a381fd0b.tar.gz chromium_src-1b6462cde9859ae75da58fc1a566e272a381fd0b.tar.bz2 |
Add file_util::ReplaceFile and use it in ImportantFileWriter.
It has more strict semantics than file_util::Move.
http://crbug.com/11585
Review URL: http://codereview.chromium.org/113207
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@16291 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/file_util_win.cc')
-rw-r--r-- | base/file_util_win.cc | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/base/file_util_win.cc b/base/file_util_win.cc index 8964fbf..77247a4 100644 --- a/base/file_util_win.cc +++ b/base/file_util_win.cc @@ -116,6 +116,18 @@ bool Move(const FilePath& from_path, const FilePath& to_path) { return false; } +bool ReplaceFile(const FilePath& from_path, const FilePath& to_path) { + // Make sure that the target file exists. + HANDLE target_file = ::CreateFile(to_path.value().c_str(), 0, + FILE_SHARE_READ | FILE_SHARE_WRITE, + NULL, CREATE_NEW, + FILE_ATTRIBUTE_NORMAL, NULL); + if (target_file != INVALID_HANDLE_VALUE) + ::CloseHandle(target_file); + return ::ReplaceFile(to_path.value().c_str(), from_path.value().c_str(), + NULL, 0, NULL, NULL) ? true : false; +} + bool CopyFile(const FilePath& from_path, const FilePath& to_path) { // NOTE: I suspect we could support longer paths, but that would involve // analyzing all our usage of files. |