5

Ist es möglich chrome.fileSystem innerhalb NaCl zu verwenden?Ist chrome.fileSystem in Google Native Client verwendbar

Dank

+0

Meine Vermutung ist "wahrscheinlich nicht", aber da Sie auf das HTML5-Dateisystem zugreifen können, könnten Sie im schlimmsten Fall dorthin kopieren, um damit zu arbeiten. Aber ich kenne das Thema nicht gut genug. – Xan

+0

@Xan danke für deinen Kommentar! – KaBa

Antwort

6

The chrome.fileSystem API können Sie die Benutzer lokalen Dateisystem über eine Chrome App zuzugreifen. Dies erfordert, dass ein Benutzer ein Verzeichnis auswählt, um es der App zugänglich zu machen.

Dieses Dateisystem kann an das NaCl-Modul übergeben und dann mit der Standard-API NaCl pp::FileSystem verwendet werden.

Es gibt ein Beispiel dafür im NaCl SDK unter examples/tutorial/filesystem_passing. Sie können den Code dafür here durchsuchen.

Hier sind die wichtigen Teile: 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"; 

Es ist wichtig zu beachten, dass alle Pfade in diesem Filesystem mit full_path vorangestellt werden muss. Alle anderen Zugriffe werden fehlschlagen.