node操作 windows的appdata本地缓存文件
const os = require('os');
const path = require("path");
const fs = require("fs");
var homedir = os.homedir();
function mkdirs(dirpath) {
if (!fs.existsSync(path.dirname(dirpath))) {
mkdirs(path.dirname(dirpath));
}
fs.mkdirSync(dirpath);
}
function createDir(myPath){
fs.existsSync(myPath) == false && mkdirs(myPath);
}
var _x = Symbol("x");
class AppData{
constructor(dbnm){
if(!dbnm){
throw new Error("the database name is needless");
return;
}
dbnm = dbnm + ".info";
this.apppath = path.join(homedir,"/AppData/Local/excelMaster/", dbnm);
createDir(path.dirname(this.apppath));
}
connect(cd){
cd = cd || function(){};
fs.readFile(this.apppath,"utf-8",function(err,res){
if(err){
this[_x] = {};
}else{
var str = Buffer.from(res, 'base64').toString("utf8");
if(str){
try{
this[_x] = JSON.parse(str);
}catch(e){
this[_x] = {};
}
}else{
this[_x] = {};
}
}
cd(err,res);
});
}
connectSync(){
try{
var res = fs.readFileSync(this.apppath,"utf-8");
var str = Buffer.from(res, 'base64').toString("utf8");
if(str){
try{
this[_x] = JSON.parse(str);
}catch(e){
this[_x] = {};
}
}else{
this[_x] = {};
}
}catch(e){
this[_x] = {};
}
}
get(k){
return this[_x][k];
}
set(k,val,callback){
callback = callback || function(){};
this[_x][k] = val;
const buf = Buffer.from(JSON.stringify(this[_x]), 'utf8');
fs.writeFile(this.apppath,buf.toString('base64'),callback);
}
setSync(k,val){
this[_x][k] = val;
const buf = Buffer.from(JSON.stringify(this[_x]), 'utf8');
fs.writeFileSync(this.apppath,buf.toString('base64'));
}
setSyncObj(obj){
for(var i in obj){
this[_x][i] = obj[i];
}
const buf = Buffer.from(JSON.stringify(this[_x]), 'utf8');
fs.writeFileSync(this.apppath,buf.toString('base64'));
}
has(k){
return k in this[_x];
}
keys(){
return Object.keys(this[_x]);
}
values(){
return Object.values(this[_x]);
}
drop(){
this[_x] = {};
const buf = Buffer.from(JSON.stringify({}), 'utf8');
fs.writeFileSync(this.apppath,buf.toString('base64'));
}
disconnect(){
this.apppath = null;
delete this[_x];
}
}
module.exports = AppData;
使用方式
var AppData = require("./appdata");
var p = new AppData("abc");
p.connectSync();
//p.setSync("manny","28");
console.log(p.get("manny"))
p.disconnect();
node操作 windows的appdata本地缓存文件的更多相关文章
- Windows下搭建本地SVN服务器【转】
转自:http://www.linuxidc.com/Linux/2015-01/111563.htm 本文介绍Windows下搭建本地SVN服务器的方法,网上资料比较少也比较旧,大都介绍的是旧版本S ...
- 强势解决:windows 不能在本地计算机中起动Tomcat参考特定错误代码1
Tomcat添加系统服务:service.bat install 启动本服务的时候却提示“windows 不能在本地计算机中起动 Apache Tomcat参考特定错误代码1,若不是Microsoft ...
- Windows不能在本地计算机启动OracleDBConsoleorcl .错误代码2
Windows 不能在 本地计算机 启动 OracleDBConsoleorcl.有关更多信息,查阅系统事件日志.如果这是非 Microsoft 服务,请与服务厂商联系,并参考特定服务错误代码 2. ...
- Windows 不能在 本地计算机 启动 SQL Server 服务 错误代码126
本文转自:http://www.cnblogs.com/yuerdongni/archive/2012/08/18/2645140.html 在使用SQL2005(或2008)是可能会遇到错误提示: ...
- windows不能在本地计算机启动SQL Server(MSSQLSERVER)
windows不能在本地计算机启动sql server 在登录数据库的时候,发现数据库不能登录,提示[无法连接到实例],很明显这是因为数据库服务没有启动导致的,我们打开[服务]启动相应的SQL数据库服 ...
- 【转】解决Windows不能在本地计算机启动apache tomcat
http://blog.163.com/ftskwsg@126/blog/static/5623853020094494117827/ 这个方法解决了我的问题. 在windows下以服务的方式启动时提 ...
- winreg操作windows注册表详解示例
#coding:utf-8 #=====================================================================#=====本程序演示了WINR ...
- C语言操作WINDOWS系统存储区数字证书相关函数详解及实例
C语言操作WINDOWS系统存储区数字证书相关函数详解及实例 以下代码使用C++实现遍历存储区证书及使用UI选择一个证书 --使用CertOpenSystemStore打开证书存储区. --在循环中 ...
- C# 操作windows服务[启动、停止、卸载、安装]
主要宗旨:不已命令形式操作windows服务 static void Main(string[] args) { var path = @"E:\开发辅助项目\WCF\WCF.Test\WC ...
随机推荐
- js 使用a标签 下载资源
文档 let data = new Blob(['hello ajanuw'], { type: 'application/text' }) let src = window.URL.createOb ...
- 理解 vm.$nextTick
有同学在看 Vue 官方文档时,对 API 文档中的 Vue.nextTick 和 vm.$nextTick 的作用不太理解. 其实如果看一下深入响应式原理 - vue.js中的有关内容,可能会有所理 ...
- [No0000DF]C# ZipFileHelper ZIP类型操作,压缩解压 ZIP 类封装
using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using Sys ...
- linux:基本概念和操作
1. 终端 Linux 默认提供了 6 个纯命令行界面的 “terminal”(准确的说这里应该是 6 个 virtual consoles)来让用户登录,在物理机系统上你可以通过使用[Ctrl]+[ ...
- [daily][pcaman] pacman滚动升级跳过指定包
有时候有些包是坏的, 我们在Syu的时候,想把它跳过去. 可以在pacman.conf 中使用如下选项: IgnorePkg=linux https://wiki.archlinux.org/ind ...
- 天使玩偶:CDQ分治
这道好(du)题(liu)还是很不错的 挺锻炼代码能力和不断优化 卡常的能力的. 对于 每次询问 我都可以将其分出方向 然后 写 也就是针对于4个方向 左下 左上 右下 右上 这样的话 就成功转换了问 ...
- idhttp与cookie
用关键词“idhttp cookie”在各大搜索引擎得到的结果,大多千篇一律,如果你搜索到这一篇,恭喜你,你有福了. 以下内容测试环境:delphi2007, winxp sp3, indy10. ...
- ORACLE UNDO
UNDO 数据操纵 数据操纵语言(DML)由以下SQL语句组成: INSERT,DELETE,UPDATE,MERGE DML始终作为事务处理的一部分执行,它可以: 使用Rollback命令执行回退 ...
- LeetCode 771 Jewels and Stones 解题报告
题目要求 You're given strings J representing the types of stones that are jewels, and S representing the ...
- scala-泛型
//实例化之后使用get方法必须传入相同类型的参数 class A[T](x: T) { def get(x: T) { print(x) } } var a1 = new A(1) a1.get(1 ...