Сообщение об ошибке является ключом.Как обычно в Windows, причина (, потому что она используется другим процессом ) неверна, но имена ( 'file.txt' -> 'file.txt \ .bak' ) являются правильными.
Присоединение не является конкатенацией строк, но предполагает, что все элементы пути, кроме последнего, представляют папки.Итак, здесь вы пытаетесь создать файл .bak
в папке с именем file.txt
.Это невозможно, потому что file.txt
- это простой файл, а не каталог.
С другой стороны, когда вы используете os.rename(file_path, file_path + '.bak')
, вы переименовываете file.txt
в file.txt.bak
в той же папке, которая разрешенаосновной файловой системой, следовательно, ошибки нет.
Таким образом, поведение соответствует ожидаемому, за исключением начала сообщения об ошибке.
Поскольку я не являюсь основным MicrosoftДевелоппер, следующее - это дикая догадка.Количество ошибок, указанных системой, ограничено.Функция переименования C получила 2 строки и передала их системному вызову для переименования.Как и ожидалось, файловая система вызвала ошибку, но так как она не была ни физической, ни полной ошибкой файловой системы, она просто выбрала отказано в разрешении причина.Что на самом деле не так, потому что не разрешено создавать папки в виде простого файла.Но сообщение об этой ошибке, к сожалению, , потому что оно используется другим процессом , что здесь глупо