diff options
author | B Stack <bgstack15@gmail.com> | 2020-05-17 17:14:47 +0000 |
---|---|---|
committer | B Stack <bgstack15@gmail.com> | 2020-05-17 17:14:47 +0000 |
commit | cca3f71f16f85f5d506bf4bb7b3ec38fda31516a (patch) | |
tree | 1f52055b2f26fc2389d3ab4eb8d8d1e234a6316a /zen/file_access.cpp | |
parent | Merge branch '10.23' into 'master' (diff) | |
parent | add upstream 10.24 (diff) | |
download | FreeFileSync-cca3f71f16f85f5d506bf4bb7b3ec38fda31516a.tar.gz FreeFileSync-cca3f71f16f85f5d506bf4bb7b3ec38fda31516a.tar.bz2 FreeFileSync-cca3f71f16f85f5d506bf4bb7b3ec38fda31516a.zip |
Merge branch '10.24' into 'master'
add upstream 10.24
See merge request opensource-tracking/FreeFileSync!21
Diffstat (limited to 'zen/file_access.cpp')
-rw-r--r-- | zen/file_access.cpp | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/zen/file_access.cpp b/zen/file_access.cpp index cb5a45ed..9a49cd55 100644 --- a/zen/file_access.cpp +++ b/zen/file_access.cpp @@ -127,6 +127,7 @@ std::optional<ItemType> zen::itemStillExists(const Zstring& itemPath) //throw Fi assert(!itemName.empty()); const std::optional<ItemType> parentType = itemStillExists(*parentPath); //throw FileError + if (parentType && *parentType != ItemType::FILE /*obscure, but possible (and not an error)*/) try { @@ -246,14 +247,12 @@ void zen::removeDirectoryPlain(const Zstring& dirPath) //throw FileError } throw FileError(replaceCpy(_("Cannot delete directory %x."), L"%x", fmtPath(dirPath)), formatSystemError(functionName, ec)); } - /* - Windows: may spuriously fail with ERROR_DIR_NOT_EMPTY(145) even though all child items have - successfully been *marked* for deletion, but some application still has a handle open! - e.g. Open "C:\Test\Dir1\Dir2" (filled with lots of files) in Explorer, then delete "C:\Test\Dir1" via ::RemoveDirectory() => Error 145 - Sample code: http://us.generation-nt.com/answer/createfile-directory-handles-removing-parent-help-29126332.html - Alternatives: 1. move file/empty folder to some other location, then DeleteFile()/RemoveDirectory() - 2. use CreateFile/FILE_FLAG_DELETE_ON_CLOSE *without* FILE_SHARE_DELETE instead of DeleteFile() => early failure - */ + /* Windows: may spuriously fail with ERROR_DIR_NOT_EMPTY(145) even though all child items have + successfully been *marked* for deletion, but some application still has a handle open! + e.g. Open "C:\Test\Dir1\Dir2" (filled with lots of files) in Explorer, then delete "C:\Test\Dir1" via ::RemoveDirectory() => Error 145 + Sample code: http://us.generation-nt.com/answer/createfile-directory-handles-removing-parent-help-29126332.html + Alternatives: 1. move file/empty folder to some other location, then DeleteFile()/RemoveDirectory() + 2. use CreateFile/FILE_FLAG_DELETE_ON_CLOSE *without* FILE_SHARE_DELETE instead of DeleteFile() => early failure */ } |