获取节点webkit中目录的完整路径
Get full path of a directory in node webkit
如何在 node webkit 应用程序中获取目录(不是当前工作目录)的绝对路径?
示例 (Mac OS) - 我在 Documents
中创建了一个名为 A
的文件夹。当我对文件系统目录条目执行 getDirectory
时,我只能得到 dir.fullPath
which returns A
app.workspace.getDirectory(self.folderpath, {}, function(dir){
if(dir) console.log('Dir: ', dir);
});
但我需要:~/Documents/A/
|| c:\Users\Username\Documents
在我的应用程序中,用户可以 choose/create 一个他们想要的目录,我 store/read 来自该文件夹的数据。
绝对路径可能不是我需要的,但我想使用默认桌面应用程序打开文件(PDF、doc...):
function getCommandLine() {
switch (process.platform) {
case 'darwin' : return 'open';
case 'win32' : return 'start';
case 'win64' : return 'start';
default : return 'xdg-open';
}
}
var exec = require('child_process').exec;
var filepath = '...';
//dir.fullPath will throw: The file /A/example.pdf does not exist.
var child = exec(getCommandLine() + ' ' + filepath, function (error, stdout, stderr) {
if (error) {
console.error(`exec error: ${error}`);
return;
}
});
child.on('close', function (e) {
console.log('E: ', e);
});
不确定我是否理解了这个问题。您可以使用 __dirname 来获取您正在执行的脚本的目录。参见:https://nodejs.org/docs/latest/api/globals.html#globals_dirname
从那里您可以使用相对路径来引用其他文件和文件夹。
示例文件夹结构:
/home/filippo/works/test/
├── subfolder
│ └── index.js
└── test.js
subfolder/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
这是您要找的吗?
出于安全原因,您不能从网页访问系统目录-文件-所有内容的绝对路径。即使您尝试从 javascript 脚本(例如)访问特定文件目录,浏览器也会立即阻止您。
一个可能对您有用的解决方案是检索用户想要使用简单的 <input type="file">
打开的文件,这样用户就可以 select 一个文件,而无需向您提供其绝对值路径;之后你可以将文件保存到服务器主机上,甚至是项目的本地目录,然后使用远程路径通过 exec 命令打开它。
实际上我最近发现(我不敢相信我一开始就错过了它但是),使用 chrome 文件系统你可以获得 "more readable" 路径信息用于显示目的。
根据您要执行的操作,您可能无法访问绝对位置,但至少您可以看到它是什么...
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。
如何在 node webkit 应用程序中获取目录(不是当前工作目录)的绝对路径?
示例 (Mac OS) - 我在 Documents
中创建了一个名为 A
的文件夹。当我对文件系统目录条目执行 getDirectory
时,我只能得到 dir.fullPath
which returns A
app.workspace.getDirectory(self.folderpath, {}, function(dir){
if(dir) console.log('Dir: ', dir);
});
但我需要:~/Documents/A/
|| c:\Users\Username\Documents
在我的应用程序中,用户可以 choose/create 一个他们想要的目录,我 store/read 来自该文件夹的数据。
绝对路径可能不是我需要的,但我想使用默认桌面应用程序打开文件(PDF、doc...):
function getCommandLine() {
switch (process.platform) {
case 'darwin' : return 'open';
case 'win32' : return 'start';
case 'win64' : return 'start';
default : return 'xdg-open';
}
}
var exec = require('child_process').exec;
var filepath = '...';
//dir.fullPath will throw: The file /A/example.pdf does not exist.
var child = exec(getCommandLine() + ' ' + filepath, function (error, stdout, stderr) {
if (error) {
console.error(`exec error: ${error}`);
return;
}
});
child.on('close', function (e) {
console.log('E: ', e);
});
不确定我是否理解了这个问题。您可以使用 __dirname 来获取您正在执行的脚本的目录。参见:https://nodejs.org/docs/latest/api/globals.html#globals_dirname
从那里您可以使用相对路径来引用其他文件和文件夹。
示例文件夹结构:
/home/filippo/works/test/
├── subfolder
│ └── index.js
└── test.js
subfolder/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
这是您要找的吗?
出于安全原因,您不能从网页访问系统目录-文件-所有内容的绝对路径。即使您尝试从 javascript 脚本(例如)访问特定文件目录,浏览器也会立即阻止您。
一个可能对您有用的解决方案是检索用户想要使用简单的 <input type="file">
打开的文件,这样用户就可以 select 一个文件,而无需向您提供其绝对值路径;之后你可以将文件保存到服务器主机上,甚至是项目的本地目录,然后使用远程路径通过 exec 命令打开它。
实际上我最近发现(我不敢相信我一开始就错过了它但是),使用 chrome 文件系统你可以获得 "more readable" 路径信息用于显示目的。
根据您要执行的操作,您可能无法访问绝对位置,但至少您可以看到它是什么...
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。