Ошибка NodeJS fs.open в существующем файле (а не проблема пути)

Я занимаюсь этим в течение долгого времени, поэтому любая помощь очень ценится. Итак, я загружаю файл и сохраняю его с помощью 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);

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

Ответ 1

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

var path = require("path");
var filename = "bdTcK6hSdownload.csv";
var csvPath = path.resolve(path.join(__dirname, "caspertemp", filename));
console.log(csvPath);

Ответ 2

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

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

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

Ответ 3

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

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

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

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

Ответ 4

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

Команда:

dir

или

ls

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