Хобрук: Ваш путь к мастерству в программировании

Не удается открыть MS Word, PDF в файловой системе на основе Fuse

Я пытаюсь реализовать файловую систему на основе Fuse с помощью Node.js на Mac. Я использую fuse-native (https://github.com/fuse-friends/fuse-native) для монтирования файловой системы.

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

Я реализовал все основные обратные вызовы предохранителей, такие как read, readdir, write, getattr, chmod, chown, mknod, mkdir, rmdir.

Пока я могу создавать, обновлять, удалять, сохранять текстовый файл в смонтированной файловой системе. Когда я пытаюсь открыть любой файл MS Word, PDF или Pages из смонтированной файловой системы (которая присутствует в зеркальном каталоге), он дает мне

Word found unreadable content in file.docx. Do you want to recover the contents of this document? If you trust the source of this document, click Yes.

и когда я нажимаю восстановить, он успешно может восстановить его.

Я не уверен, что происходит, но не могу открыть файл Word.

Моя функция чтения выглядит так (я читаю и открываю из зеркального каталога): fs — файловая система узла

fs.read(fd, buf, 0, buf.length, null, (err, bytesRead, buffer) => {
      if (err) {
        Logger.info(err.message);
        return cb(Fuse.ENOENT);
      }
      const part = buffer.slice(position, position + bytesRead);
      part.copy(buffer);
      return cb(bytesRead);
    });

и открыть:

const open = (path: string, flags: number, cb: Function) => {
  // Logger.info('In Open');
  try {
    const fd = fs.openSync(
      `/Users/xyz/Desktop/Fuse${path}`,
      toFlag(flags)
    );
    return cb(0, fd);
  } catch (err) {
    Logger.info(err.message);
    return cb(Fuse.ENOENT);
  }
};

Любая помощь будет оценена по достоинству. Спасибо!


Ответы:


1

Это было исправлено путем изменения функции чтения. Читать было неправильно.

try {
      const bytesRead = fs.readSync(fd, buf, 0, length, position);
      return cb(bytesRead);
    } catch (error) {
      Logger.info(error.message);
      return cb(Fuse.ENOENT);
    }
16.03.2021
Новые материалы

Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

«Очень простой» эволюционный подход к обучению с подкреплением
В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

Фишинг — Упаковано и зашифровано
Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..

ВЫ РЕГРЕСС ЭТО?
Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

Не зря же это называют интеллектом
Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

LeetCode Проблема 41. Первый пропущенный положительный результат
LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..