原因

常规DOS路径限制为MAX_PATH(260)个字符,包括字符串的终止字符NUL。 通过使用以 \\?\ 前缀开头的扩展长度路径,可以超过此限制。此路径必须是完全限定的Unicode字符串,并且只能使用反斜杠作为路径分隔符。 根据Microsoft的file system functionality comparison,最大扩展路径长度为32760个字符。单个文件或目录名最多可以包含255个字符(UDF文件系统为127个字符)。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import os
from PIL import Image
import nrrd

# ================== nrrd图片读取 ===========================

files_root = r"C:\test\images"

for root, dirs, files in os.walk(files_root, topdown=False):
for name in files:
if ".nrrd" in name:

# 解决长路径导致读写文件错误
fn = os.path.join('\\\\?\\'+root, name)

nrrd_data, nrrd_options = nrrd.read(fn)
nrrd_image = Image.fromarray(nrrd_data)
nrrd_image = nrrd_image.rotate(-90)
# nrrd_image.show()
if nrrd_image.mode == "F":
nrrd_image = nrrd_image.convert("RGB")
nrrd_image.save(f"{fn[:-5]}.png")
print(fn + " is ok!")