获取node webkit中目录的完整路径

时间:2016-11-21 16:20:29

标签: javascript node.js node-webkit

如何获取node webkit应用程序中目录(不是当前工作目录)的绝对路径?

示例(Mac OS) - 我在A中创建了一个名为Documents的文件夹。当我使用文件系统目录条目getDirectory时,我只能获得返回dir.fullPath的{​​{1}}

A

但我需要:app.workspace.getDirectory(self.folderpath, {}, function(dir){ if(dir) console.log('Dir: ', dir); }); || ~/Documents/A/

在我的应用中,用户可以选择/创建他们想要的目录,并存储/读取该文件夹中的数据。

绝对路径可能不是我需要的,但我想用默认桌面应用程序打开文件(PDF,doc ...):

c:\Users\Username\Documents

3 个答案:

答案 0 :(得分:2)

出于安全原因,您无法从网页访问系统目录文件的绝对路径。即使您尝试从javascript脚本(例如)访问特定文件目录,浏览器也会立即阻止您。

可能对您有用的解决方案是使用简单的<input type="file">检索用户想要打开的文件,以便用户可以选择文件而不向您提供其绝对路径;之后您可以将文件保存到服务器主机,甚至是项目的本地目录,然后使用远程路径使用exec命令将其打开。

答案 1 :(得分:1)

不确定我是否明白这个问题。您可以使用__dirname来获取正在执行的脚本的目录。请参阅:https://nodejs.org/docs/latest/api/globals.html#globals_dirname

从那里你可以使用相对路径来引用其他文件和文件夹。

示例文件夹结构:

/home/filippo/works/test/
├── subfolder
│   └── index.js
└── test.js

子文件夹/ index.js:

module.exports = {'folder': __dirname};

test.js:

var m = require("./subfolder/");

console.log("test.js running in: ", __dirname);
console.log("m module running in: ", m.folder);

运行测试:

$ node test.js 
test.js running in:  /home/filippo/works/test
m module running in:  /home/filippo/works/test/subfolder

这是你在找什么?

答案 2 :(得分:0)

实际上我最近发现了(我不敢相信我错过了它,但是),使用chrome文件系统,你可以获得“更具可读性”的路径信息用于显示目的。

根据您的目的,您可能无法访问绝对位置,但至少可以看到它是什么......

fileSystem.getDirectory(path, {}, function(dir){
    if(dir) console.log('This should return full path: ', dir.getDisplayPath());
    var fullpath = dir.getDisplayPath();

    //now with this, I can open any file I want via child process :)

    var child = exec(getCommandLine() + ' ' + fullpath, function (error, stdout, stderr) 
    //.......
});

有关Chrome文件系统的更多信息here