Ошибка NodeJS fs.open для существующего файла (не проблема пути) - PullRequest
13 голосов
/ 04 февраля 2012

Я имел дело с этим в течение долгого времени, поэтому любая помощь очень ценится. Итак, я загружаю файл и сохраняю его с помощью PhantomJS и CasperJS. Позвольте мне указать, что они не проблема. Файл скачивается без проблем.

Проблема в том, что NodeJS не распознает или не откроет файл после его загрузки. Я не могу fs.stat, fs.open и т. Д. Ничего не работает.

Я поделюсь кодом через секунду, но вот журнал:

Here: bdTcK6hSdownload.csv

[ '2puzZMeLdownload.csv',
  '2s5ICbKNdownload.csv',
  'bdTcK6hSdownload.csv',
  'izIfagwCdownload.csv' ]

fs.js:230

return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);

Error: ENOENT, no such file or directory './caspertemp/bdTcK6hSdownload.csv'

at Object.openSync (fs.js:230:18)
at Object.processCSV (/Users/Home/dev/node_modules/inviter/index.js:64:29)
at /Users/Home/dev/node_modules/inviter/index.js:36:33
at ChildProcess.exithandler (child_process.js:281:7)
at ChildProcess.emit (events.js:70:17)
at maybeExit (child_process.js:361:16)
at Process.onexit (child_process.js:397:5)

Как видите, я распечатываю имя созданного файла, затем печатаю содержимое каталога и затем пытаюсь открыть файл. Как вы можете видеть, bdTcK6hSdownload.csv существует в каталоге, но не открывается при открытии.

Простой фрагмент кода здесь:

console.log('Here: ' + filename);

filenames = fs.readdirSync('./caspertemp/');
console.log(filenames);

var fd = fs.openSync('./caspertemp/' + filename, 'r');
console.log(fd);

Существует множество других процессов до и после этого, но ничего из этого не имеет значения, так как эта основная функция не работает. Пожалуйста помоги! Это мучало уже несколько недель.

Ответы [ 4 ]

3 голосов
/ 04 февраля 2012

Я предполагаю, что это несоответствие в текущем рабочем каталоге. Вы запускаете процессы casperJS и node.js из одного каталога? Кто-нибудь из них меняет рабочий каталог во время выполнения? Попробуйте что-то вроде этого, где узел __dirname даст вам путь к каталогу исполняемого в данный момент .js файла

var path = require("path");
var filename = "bdTcK6hSdownload.csv";
var csvPath = path.resolve(path.join(__dirname, "caspertemp", filename));
console.log(csvPath);
0 голосов
/ 12 января 2018

Расширение файла может быть введено дважды, следовательно, не найдено. Перейдите в каталог файлов с помощью командной строки и получите список файлов в этом каталоге

Команда:

dir

или

ls

Получите фактическое имя файла и используйте его. В моем случае я сохранил текстовый документ как «readMe.txt», а в командной строке он появился как «readMe.txt.txt». Мне не нужно было добавлять расширение файла при сохранении, и это создало проблему.

0 голосов
/ 05 декабря 2016

Это происходит только тогда, когда вы даете неправильный путь. Я столкнулся с той же проблемой.

Изначально я запускал файл непосредственно с узла xyz.js, и необходимые статические файлы находятся в том же хранилище. Но когда я запускаю npm, код выдает ошибку выше:

    fs.js 495 
    return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
    **Error: ENOENT, no such file or directory**

Затем я переместил статические ресурсы, переименовал путь и все заработало. Надеюсь, это поможет вам.

0 голосов
/ 13 декабря 2015

Другая возможность - время.

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

В таких случаях может случиться так, что перезапуск "исправляет" вещи, но только потому, что в качестве побочного эффекта он либо освобождает дескриптор, либо задерживает обработку, поэтому, когда ваш код пытается повторить попытку, все нормально.

...