On Windows 10 Home and Python 3.6.6, I have enabled long paths by setting it in the registry and by prefixing \\?\
. I have also followed this answer and ensured that the path uses \\
instead of /
, is in unicode u'
and is an absolute path. There are no illegal characters in my file name. My file path is also way smaller than the maximum total path length of 32,767 characters.
Despite doing all of the above, I still get OSError: [Errno 22] Invalid argument
when I try to create a long file name. I have tried 3 different ways of creating the filepath as output_filepath
below but all do not work:
# Long filename - Does not work
import os, pathlib
output_filepath = u'\\\\?\\' + os.path.join(os.path.dirname(os.path.realpath(__file__)), u"somereallylongname" * 30 + u".result")
# output_filepath = u'\\\\?\\C:\\Users\\Jarrett\\Downloads\\somereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongname\\x.x'
# output_filepath = r'\\?\C:\Users\Jarrett\Downloads\somereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongnamesomereallylongname\x.x'
print("filepath length = %s" % len(output_filepath))
print("filename length = %s" % len(os.path.basename(output_filepath)))
if not os.path.exists(os.path.dirname(output_filepath)): os.makedirs(os.path.dirname(output_filepath))
pathlib.Path(output_filepath).touch() # or open(output_filepath, 'a').close()
print("Wrote to " + output_filepath)