2016-11-21 7 views
3

ノードのWebkitアプリケーションでディレクトリの絶対パス(現在の作業ディレクトリではありません)を取得するにはどうすればよいですか?ノードWebkitのディレクトリのフルパスを取得

例 - DocumentsAという名前のフォルダを作成しました。私は、ファイルシステムのディレクトリエントリでgetDirectoryを行うと、私はA

app.workspace.getDirectory(self.folderpath, {}, function(dir){ 
    if(dir) console.log('Dir: ', dir); 
}); 

を返すdir.fullPathを得ることができますしかし、私は必要があります:~/Documents/A/を|| c:\Users\Username\Documents

私のアプリのユーザーは、いつでも好きな場所でディレクトリを選択/作成し、そのフォルダのデータを保存/読み込むことができます。

絶対パスは、私は必要なものではないかもしれないが、私は、デフォルトのデスクトップアプリケーションとファイル(PDF、DOCを...)開きたい:私はthequestionを理解してきたわからない

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); 
}); 

答えて

0

実際に私は最近、(私は最初にそれを逃したとは思えませんが)クロームファイルシステムを使って、表示目的で "より読みやすい"パス情報を得ることができることを発見しました。

あなたがやろうとしている内容に応じて、クロムのファイルシステムに関する...

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) 
    //....... 
}); 

詳細情報hereあなたは絶対的な場所にはアクセスしないかもしれないが、少なくともあなたはそれが何であるかを見ることができます。

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 

これはあなたが探しているものですか?

+0

あなたはそれを理解していません:)スクリプトのディレクトリと私がアクセスしたいフォルダは別です。どちらもどこでもかまいません。スクリプトは明らかにアプリケーションパッケージから実行されています。アプリケーションパッケージは、理想的にはアプリケーションフォルダにあり、他のディレクトリは自由選択です。ユーザーは自分のマシン上の任意のフォルダを選択できます。私が本当にしたいのは、ユーザーのデフォルトアプリケーションを使って開いているドキュメントですが、私はexecでこれを行う方法を見つけましたが、シェルスクリプトはルートから実行されています... –

+0

申し訳ありません。そして、あなたが推測するどこかでユーザーが選択したフォルダを保存することはできません。 – filippo

+0

完全なURLではありません。サンドボックス化されていません。私は '〜/ Documents/Myfolder'に自分のフォルダを作成しました。'/Myfolder'だけを返すことができます –

2

セキュリティ上の理由から、Webページからシステムのディレクトリファイルの絶対パスにアクセスすることはできません。たとえjavascriptスクリプト(たとえば)から特定のファイルディレクトリにアクセスしようとしても、ブラウザはすぐにあなたをブロックします。

解決策は、ユーザーが開こうと思うファイルを簡単な<input type="file">で取得することです。その結果、絶対パスを与えずにファイルを選択できるようになります。その後、ファイルを保存できますサーバーホストまたはプロジェクトのローカルディレクトリにコピーしてから、リモートパスを使用してexecコマンドで開くことができます。

関連する問題