Eryk Sun <eryk...@gmail.com> added the comment:

> if NotADirectoryError should be raised, it should mention '/path/to/file' 
> rather then '/path/to/file/somename.txt'.

POSIX specifies that C open() should set errno to ENOTDIR when an existing path 
prefix component is neither a directory nor a symlink to a directory [1]. What 
you propose isn't possible to implement reliably unless the filesystem is 
locked or readonly, so it should be handled by the application instead of by 
the system or standard libraries.

> FileNotFoundError: [Errno 2] No such file or directory: 
> 'C:\\path\\chrome\\to\\file\\somename.txt'

Windows specifies that this case should fail as follows: "[i]f 
Link.File.FileType is not DirectoryFile, the operation MUST be failed with 
STATUS_OBJECT_PATH_NOT_FOUND" [2] (see Phase 6 in the linked pseudocode). 

The Windows API maps this status code to ERROR_PATH_NOT_FOUND (3), which is 
distinct from ERROR_FILE_NOT_FOUND (2). However, the C runtime maps both of 
these system error codes to POSIX ENOENT. All isn't lost, however, because it 
also saves the OS error in _doserrno. io.FileIO could preset _doserrno to 0, 
and if it's non-zero after calling _wopen, use its value with 
PyErr_SetExcFromWindowsErrWithFilenameObject instead of calling 
PyErr_SetFromErrnoWithFilenameObject.

---

[1] https://pubs.opengroup.org/onlinepubs/9699919799/functions/open.html
[2] 
https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-fsa/8ada5fbe-db4e-49fd-aef6-20d54b748e40

----------
nosy: +eryksun

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue41737>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to