2015-12-08 2 views
14

Приложение должно хранить данные журнала на сетевом диске. Когда диск размещен под Windows, все в порядке. Когда диск размещен под Mac, чтение/запись в порядке, но append получает EPERM, поэтому журнал не работает вообще. коды вполне тривиальныеEPERM на appendFile на сетевом диске

fs.appendFileSync('xxx.txt', 'zzzzzzzz'); 

Как правильно добавить данные? Обычно файл слишком большой для загрузки в память.

Обновление: чтение-запись-удаление-создание - это нормально! Только открытие с добавлением завершается

+0

Любопытно, если вы попробовали fs.appendFile? Вероятно такой же результат, но стоит попробовать. – Gary

+0

Любое приложение не работает. Даже createWriteStream с флагом 'a'. Однако писать без такого флага отлично работает –

+0

Вы сделали ls -le xxx.txt? У вас может быть конфликт ACL. – Gary

ответ

0

EPERM означает Ошибка - PERMission: nodejs не разрешено записывать в файл журнала. Проверьте, имеет ли приложение доступ к файлу журнала и изменит его, чтобы приложение узла могло записывать в файл журнала.

На mac вы можете сделать chmod 777 somefile.log (обратите внимание, что это позволяет любому, у кого есть доступ к вашей файловой системе, для записи в файл журнала).

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

+0

Как я уже сказал, 'чтение/запись в порядке, но append получает EPERM' –

2

Я бы пошел с Люком Гендриком. EPERM происходит, когда у вас нет достаточно прав на файл/folder.Try следующие

Код:

fs.chmod('xxx.txt', 777, function(err){ 
    if(err){ 
    console.log(err); 
    return; 
    } 
    fs.appendFileSync('xxx.txt', 'zzzzzzzz'); 
}); 

Ссылка:

https://nodejs.org/api/fs.html#fs_fs_chmodsync_path_mode https://nodejs.org/api/fs.html#fs_fs_appendfilesync_file_data_options

Надеюсь это поможет.

+0

Тот же результат - EPERM. Под окнами append есть отдельное разрешение. Вероятно, узел может иметь ошибку при запуске под окнами, использующими hfs-drive или аналогичный. –

+0

Я сказал дважды - read-write-delete-create - это нормально! Только открытие с добавлением завершается с ошибкой. –

+0

Это не работает под Windows при использовании appendFile или appendFileSync. Тот факт, что appendFile и appendFileSync могут создавать файл, но не записывать его, скорее всего, являются ошибкой с NodeJS для их сборки Windows. Очень жаль. Вы можете appendFile или appendFileSync в локальном временном файле, а затем скопировать его в нужное место назначения. Тем не менее, это не идеальный вариант. – ariestav

1

Возможно, файл используется другим процессом? (Таким образом, доступ/операция запрещена)

+0

Нет. Я пробовал несколько раз. –

Смежные вопросы