5

Возможно ли использовать chrome.fileSystem внутри NaCl?Is chrome.fileСистема, используемая внутри Google Собственный клиент

Благодаря

+0

Мое предположение «вероятно, нет», но, увидев, что вы можете получить доступ к файловой системе HTML5, вы могли бы в худшем случае скопировать туда, чтобы работать с ней. Но я не знаю эту тему достаточно хорошо. – Xan

+0

@Xan благодарит за ваш комментарий! – KaBa

ответ

6

The chrome.fileSystem API позволяет получить доступ к локальной файловой системе пользователя с помощью Chrome App. Это требует от пользователя выбора каталога для раскрытия приложения.

Эта файловая система может быть передана в модуль NaCl, а затем использована со стандартным API NaCl pp::FileSystem.

Существует пример этого в SDK NaCl по адресу examples/tutorial/filesystem_passing. Вы можете просмотреть код для него here.

Вот важные части: JavaScript:

chrome.fileSystem.chooseEntry({type: 'openDirectory'}, function(entry) { 
    if (!entry) { 
    // The user cancelled the dialog. 
    return; 
    } 

    // Send the filesystem and the directory path to the NaCl module. 
    common.naclModule.postMessage({ 
    filesystem: entry.filesystem, 
    fullPath: entry.fullPath 
    }); 
}); 

C++:

// Got a message from JavaScript. We're assuming it is a dictionary with 
// two elements: 
// { 
//  filesystem: <A Filesystem var>, 
//  fullPath: <A string> 
// } 
pp::VarDictionary var_dict(var_message); 
pp::Resource filesystem_resource = var_dict.Get("filesystem").AsResource(); 
pp::FileSystem filesystem(filesystem_resource); 
std::string full_path = var_dict.Get("fullPath").AsString(); 
std::string save_path = full_path + "/hello_from_nacl.txt"; 
std::string contents = "Hello, from Native Client!\n"; 

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

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