Ошибка 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". Мне не нужно было добавлять расширение файла при сохранении, и это создало проблему.