我想从名为saveFiles的文件夹中加载一个JSON文件(与nw.exe文件和package.json文件(清单文件)在同一目录中)。问题是程序当前将JSON文件保存到C:\Users\userName\AppData\Local\appName\User Data\Default folder
。我无法弄清楚如何更改目标文件夹。我读到我可以通过调整manifest package.json文件中的"chromium-args": "--data-path=''
值来更改它。但我不知道我需要使用它才能起作用。目前package.json看起来像这样:
{
"main": "index.html",
"name": "appName",
"chromium-args": "--data-path='./saveFiles/'",
"window":
{
"toolbar": true,
"width": 1600,
"height": 900,
"min_width": 1000,
"min_height": 500,
"fullscreen": true,
"title":"App Name"
}
}
我试过几种变化试图让它起作用:--data-path='./saveFiles/'
,--data-path='/saveFiles/'
,--data-path='saveFiles/'
,但没有任何成功。我的格式错了吗?我应该使用除"chromium-args": "--data-path=''"?
之外的其他东西有不同的方法来更改保存位置/目录吗?我不知道如何更改它以使其工作。
更多信息:
当我保存JSON文件时,我使用以下代码:
var fs = require('fs');
var path = require('path');
function saveSettings (settings, callback) {
var file = 'testSave.json';
var filePath = path.join(nw.App.dataPath, file);
fs.writeFile(filePath, settings, function (err) {
if (err) {
console.info("There was an error attempting to save your data.");
console.warn(err.message);
return;
} else if (callback) {
callback();
}
});
}
var mySettings = {
color:'red',
secondaryColor:'blue'
}
mySettings = JSON.stringify(mySettings);
saveSettings(mySettings, function () {
console.log('Settings saved');
});
这可以将文件保存到C:\ Users \ userName \ AppData \ Local \ appName \ User Data \ Default文件夹,但我想将其保存到saveFiles文件夹(与清单文件位于同一位置(package.JSON) )和nw.exe文件(与package.json位于同一文件夹中))。
加载JSON文件的加载函数如下所示:
function testLoadFunc(){
path = require('path');
var xmlhttp = new XMLHttpRequest();
var url = "saveFiles/testSave.json";
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var loadedSettings = JSON.parse(this.responseText);
console.log('color: ' + loadedSettings.color);
}
};
xmlhttp.open("GET", url, true);
xmlhttp.send();
}
testLoadFunc(); //Loads json file
这会正确加载文件,但我必须手动将testSave.json文件放入saveFiles文件夹中。我想自动将testSave.json保存到saveFiles文件夹中。因此,我试图找出如何更改保存位置/目录。
另一种选择是弄清楚如何从当前保存位置C:\Users\userName\AppData\Local\appName\User Data\Default
加载文件,但我不知道如何做到这一点。最好的选择是将保存位置更改为saveFiles文件夹。
感谢您提供任何帮助。
您可以做的一件事是使用节点附带的“FS”模块。我写了一个函数,应该允许你传入一个文件名(包括扩展名)和fileContents:
const fs = require('fs');
function writeToFileNWJS(outfilePath, contents){
let outfile = fs.createWriteStream(outfilePath);
outfile.write(contents);
outfile.end();
}
如果要将文件保存在项目的根目录中,请使用“./filename”作为文件名。 NW.js中的路径相关性与节点中的其他任何位置相同。如果要保存在上面的目录中,请使用“../filename”。
如果要查看项目中任何位置的路径,请将其添加到文件中:
const path = require('path');
console.log(path);
您可以将“../”连接到您想要爬上的每个目录的开头路径;或者将其他目录连接到路径末尾以向下钻取。
'fs'和'path'模块都包含在node.js中,不需要任何额外的npm install命令。
希望这可以帮助!
编辑:
如果要在调用另一个函数之前确保完全写入文件,则可以在触发“close”事件时调用另一个函数:
outfile.on('close', function() {
console.log('file done');
});