Не удается найти файл в NodeJS в Windows, если имя содержит подчеркивание и тире - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь прочитать файл в Windows 7, имя файла выглядит так:

SOME_SOMEELSE_2018-10-11T00-38-55

Мой код:

let ff = path.resolve(__dirname, 'SOME_SOMEELSE_2018-10-11T00-38-55.html');
fs.readFileSync(ff, 'UTF8');

Как только я изменю имя файла на что-то вроде 123.html это работает сразу, и я могу читать содержимое файла.

То, что я пробовал: кодировать _ и - в Unicode (\u005F и \u2212 соответственно), проверено наПримерно в сто раз путь к файлу, нормализованный путь, разрешенный путь, нормализация + разрешение одновременно, жестко закодированный абсолютный путь, исключая имя файла, заменяет обратную косую черту на прямую, когда путь готов, но, похоже, ничего не работает.

Вывод:

ENOENT: no such file or directory, open 'D:\work\rep\SOME_SOMEELSE_2018-10-11T00-37-36.html'

Вывод для упрощенного имени файла (без специальных символов, скажем, test.html) с тем же фрагментом в том же месте возвращает содержимое файла.

Есть идеи?

1 Ответ

0 голосов
/ 11 октября 2018

Удалите начальный / из второго аргумента path.resolve(), чтобы он был относительным, а не абсолютным.

let ff = path.resolve(__dirname, 'SOME_SOMEELSE_2018-10-11T00-37-36.html');
fs.readFileSync(ff, 'UTF8');

Работает, когда вы изменяете его на 123.htmlпотому что это относительный путь.

Дополнительные пояснения: проблема не в _ или -.Проблема в том, что второй аргумент является абсолютным путем, и это означает, что первый аргумент игнорируется.Начиная с документов :

Данная последовательность путей обрабатывается справа налево, причем каждый последующий путь добавляется до тех пор, пока не будет построен абсолютный путь.Например, при заданной последовательности сегментов пути: / foo, / bar, baz, вызов path.resolve ('/ foo', '/ bar', 'baz') вернет /bar/baz.

...