| 710 | 
  710 | 
  
                // MSVCRT rename that does not overwrite existing files
 
   | 
  | 711 | 
  711 | 
  
    #ifdef EXV_UNICODE_PATH
 
   | 
  | 712 | 
  712 | 
  
                if (p_->wpMode_ == Impl::wpUnicode) {
   | 
   | 
  713 | 
  
    #if defined WIN32 && !defined __CYGWIN__
 
   | 
   | 
  714 | 
  
                    // Windows implementation that deals with the fact that ::rename fails
 
   | 
   | 
  715 | 
  
                    // if the target filename still exists, which regularly happens when
 
   | 
   | 
  716 | 
  
                    // that file has been opened with FILE_SHARE_DELETE by another process,
 
   | 
   | 
  717 | 
  
                    // like a virus scanner or disk indexer
 
   | 
   | 
  718 | 
  
                    // (see also http://stackoverflow.com/a/11023068)
 
   | 
   | 
  719 | 
  
                    if (ReplaceFileW(wpf, fileIo->wpath().c_str(), NULL, REPLACEFILE_IGNORE_MERGE_ERRORS, NULL, NULL) == 0) {
   | 
   | 
  720 | 
  
                        throw WError(17, fileIo->wpath(), wpf, strError().c_str());
 
   | 
   | 
  721 | 
  
                    }
 
   | 
   | 
  722 | 
  
    #else
 
   | 
  | 713 | 
  723 | 
  
                    if (fileExists(wpf) && ::_wremove(wpf) != 0) {
   | 
  | 714 | 
  724 | 
  
                        throw WError(2, wpf, strError().c_str(), "::_wremove");
 
   | 
  | 715 | 
  725 | 
  
                    }
 
   | 
  | ... | ... |  | 
  | 717 | 
  727 | 
  
                        throw WError(17, fileIo->wpath(), wpf, strError().c_str());
 
   | 
  | 718 | 
  728 | 
  
                    }
 
   | 
  | 719 | 
  729 | 
  
                    ::_wremove(fileIo->wpath().c_str());
 
   | 
   | 
  730 | 
  
    #endif
 
   | 
  | 720 | 
  731 | 
  
                    // Check permissions of new file
 
   | 
  | 721 | 
  732 | 
  
                    struct _stat buf2;
 
   | 
  | 722 | 
  733 | 
  
                    if (statOk && ::_wstat(wpf, &buf2) == -1) {
   | 
  | ... | ... |  | 
  | 737 | 
  748 | 
  
                else
 
   | 
  | 738 | 
  749 | 
  
    #endif // EXV_UNICODE_PATH
 
   | 
  | 739 | 
  750 | 
  
                {
   | 
   | 
  751 | 
  
    #if defined WIN32 && !defined __CYGWIN__
 
   | 
   | 
  752 | 
  
                    // Windows implementation that deals with the fact that ::rename fails
 
   | 
   | 
  753 | 
  
                    // if the target filename still exists, which regularly happens when
 
   | 
   | 
  754 | 
  
                    // that file has been opened with FILE_SHARE_DELETE by another process,
 
   | 
   | 
  755 | 
  
                    // like a virus scanner or disk indexer
 
   | 
   | 
  756 | 
  
                    // (see also http://stackoverflow.com/a/11023068)
 
   | 
   | 
  757 | 
  
                    if (ReplaceFile(pf, fileIo->path().c_str(), NULL, REPLACEFILE_IGNORE_MERGE_ERRORS, NULL, NULL) == 0) {
   | 
   | 
  758 | 
  
                        throw Error(17, fileIo->path(), pf, strError());
 
   | 
   | 
  759 | 
  
                    }
 
   | 
   | 
  760 | 
  
    #else
 
   | 
  | 740 | 
  761 | 
  
                    if (fileExists(pf) && ::remove(pf) != 0) {
   | 
  | 741 | 
  762 | 
  
                        throw Error(2, pf, strError(), "::remove");
 
   | 
  | 742 | 
  763 | 
  
                    }
 
   | 
  | ... | ... |  | 
  | 744 | 
  765 | 
  
                        throw Error(17, fileIo->path(), pf, strError());
 
   | 
  | 745 | 
  766 | 
  
                    }
 
   | 
  | 746 | 
  767 | 
  
                    ::remove(fileIo->path().c_str());
 
   | 
   | 
  768 | 
  
    #endif
 
   | 
  | 747 | 
  769 | 
  
                    // Check permissions of new file
 
   | 
  | 748 | 
  770 | 
  
                    struct stat buf2;
 
   | 
  | 749 | 
  771 | 
  
                    if (statOk && ::stat(pf, &buf2) == -1) {
   |