Является ли вызывающая программа Windows ответственной за добавление \\?\ к аргументам длинного имени файла

В моей программе Java я использую библиотеку командной строки для разветвления процесса Java. Это не удается (в зависимости от того, как используется программа), когда путь к файлу JAR, который я передаю в вызове java.exe -jar, превышает предел длины пути Windows в 260 символов. (Сообщение об ошибке: Error: Unable to access jarfile, за которым следует имя пути.) Я могу заставить вызов Java работать (вручную), добавляя префикс \\?\ к имени файла JAR. Это решает один конкретный экземпляр проблемы, но является ли это правильным подходом в целом?

Должен ли я ожидать, что программы Windows правильно обработают длинные пути, переданные в качестве аргументов командной строки, или - ответственность за обнаружение длинных путей и добавление префикса \\?\ лежит на вызывающей стороне?

Или менее общий: есть ли ошибка в java.exe или в библиотеке командной строки?


person oberlies    schedule 24.08.2012    source источник


Ответы (1)


Большинство программ просто берут имя файла и передают его как есть функции API, например CreateFile(). Таким образом, в этом случае вызывающая сторона действительно будет нести ответственность за обнаружение длинного имени файла и соответствующий префикс перед его передачей.

person Remy Lebeau    schedule 24.08.2012