Текущая проблема, с которой я сталкиваюсь в своем проекте, заключается в том, что я не знаю, как читать / записывать файлы из собственного дополнения node.js.
Я должен построить тип шифрования дешифрования (алгоритм RC6). Но для того, чтобы зашифровать файлы, я должен иметь возможность каким-то образом читать и записывать их из «node-webkit». Я строю файл .cc с помощью nw-gyp и пробовал несколько возможностей, но ни одна из них не работала.
Я строю свой проект с помощью «grunt-node-webkit-builder» и просто хочу прочитать / записать один файл из папки сборки «nw», где находится nw.exe.
Структура выглядит так:
.webkitbuilds
.releases
.nw
.win
.nw
encrypt.txt
ffmpegsumo.dll
icudt.dll
libEGL.dll
libGLESv2.dll
nw.exe
nw.pak
Как я могу прочитать в моем дополнении c ++ native node.js этот файл «encrypt.txt».
Помогите ?
Редактировать:
Есть ли способ использовать libuv с crypto ++?
РЕДАКТИРОВАТЬ 2:
У меня есть следующий код. В тот момент, когда я его выполняю, окно зависает.
hello.cc:
#include <node.h>
#include <v8.h>
#include <stdio.h>
#include <fcntl.h>
using namespace v8;
#define __S_IREAD 0400 /* Read by owner. */
#define __S_IWRITE 0200 /* Write by owner. */
#define __S_IEXEC 0100 /* Execute by owner. */
#define S_IRUSR __S_IREAD /* Read by owner. */uv_loop_t* loop;
uv_fs_t open_req;
void open_cb(uv_fs_t* req);
const char* path = "encrypt.txt";
void open_cb(uv_fs_t* req) {
int result = req->result;
if (result == -1) {
fprintf(stderr, "Error at opening file: %s\n",
uv_strerror(uv_last_error(loop)));
}
uv_fs_req_cleanup(req);
printf("Successfully opened file.\n");
}
char *get(v8::Local<v8::Value> value, const char *fallback = "") {
if (value->IsString()) {
v8::String::AsciiValue string(value);
char *str = (char *) malloc(string.length() + 1);
strcpy(str, *string);
return str;
}
char *str = (char *) malloc(strlen(fallback) + 1);
strcpy(str, fallback);
return str;
}Handle<Value> Encrypt(const Arguments& args) {
HandleScope scope;
char* textToEncrypt = get(args[0], "str");
char* password = get(args[1], "str");
loop = uv_default_loop();
int r = uv_fs_open(loop, &open_req, path, O_RDONLY, S_IRUSR, open_cb);
if (r) {
fprintf(stderr, "Error at opening file: %s\n",
uv_strerror(uv_last_error(loop)));
}
uv_run(loop, UV_RUN_DEFAULT);
return scope.Close(String::New("done"));
}
void Init(Handle<Object> exports) {
exports->Set(String::NewSymbol("Encrypt"),
FunctionTemplate::New(Encrypt)->GetFunction());
}
NODE_MODULE(hello, Init)
В Javascript:
var application = require('./js/build/Release/hello');
var encrypted_data = "";
$(document).ready(function() {
$('#btn_encrypt').on('click', function() {
encrypted_data = application.Encrypt("val","val");
console.log(encrypted_data);
})
});
Задача ещё не решена.
Других решений пока нет …