我有一个breadcrumbs组件(我正在使用来自this project的文件资源管理器功能)。问题是我不知道如何更改它显示的磁盘。
当我点击其中的任何路径时,我明白了:
Uncaught (in promise) Error: Path does not exist
所以在ls.js文件中我更改了这段代码:
export function readdir (path) {
return pathExists(path)
? fs.readdir(path)
: Promise.reject(new Error('Path does not exist'))
}
要使用此代码查看它正在尝试阅读的内容:
export function readdir (path) {
return fs.readdir(path)
}
因此事实证明,显示C:
磁盘是硬编码的。我不知道如何使它动态化(显示任何指定磁盘的内容)。
C: > Users
路径,我就会: Uncaught (in promise) Error: ENOENT: no such file or directory, scandir 'E:\Users'
fs.readdir("/" + path)
但它给了我这个错误: Uncaught (in promise) Error: ENOENT: no such file or directory, scandir 'E:\C:\Users\
项目文件夹位于 E:磁盘
而面包屑显示 C:磁盘的内容
import fs from 'fs-extra'
import { join } from 'path'
/**
* Get Array for path contents. Checks if path exists
* @param {String} path
* @return {Promise}
*/
export function readdir (path) {
return fs.readdir(path)
}
/**
* Alias of fs.existsSync
* @param {String} path
* @return {Boolean}
*/
export function pathExists (path) {
return fs.existsSync(path)
}
/**
* Get path stat
* @param {String} path
* @return {Promise}
*/
export function stat (path) {
return fs.stat(path)
}
/**
* Take in file path and return contents with stat
* @param {String} path
* @return {Array}
*/
export default path => {
return new Promise((resolve, reject) => {
const contents = []
readdir(path).then(files => {
let statsPromises = []
files.forEach(file => {
statsPromises.push(stat(join(path, file)))
})
Promise.all(statsPromises).then(stats => {
stats.forEach((stat, i) => {
contents.push({
name: files[i],
path: join(path, files[i]),
stat
})
})
resolve(contents)
})
})
})
}
答案 0 :(得分:1)
如果您查看 Breadcrumbs.vue
,您会在底部看到以下方法。
placePath () {
return this.$store.state.Place.path
}
在那里你可以看到路径是从状态中获取的。状态位于 Place.js
文件中。
此状态路径在 Place.vue
文件中初始化。在那里,您将看到如下方法。
load (path = this.$electron.remote.app.getPath('home')) {
path = join(path)
this.$store.dispatch('getContents', path).then(() => {
this.$store.commit('setPlacePath', path)
}, err => {
console.error(err)
this.$route.push('/')
})
}
路径来自以下行。
的 this.$electron.remote.app.getPath('home')
强>
以上 app.getPath()
方法的电子documentation如下。
app.getPath(name)
name
字符串返回
String
- 指向特定目录或文件的路径 与name
。失败时会抛出Error
。您可以通过名称请求以下路径:
home
用户的主目录。appData
每个用户的应用程序数据目录,默认情况下指向:* *%APPDATA%
在Windows *$XDG_CONFIG_HOME
或 Linux上的~/.config
* macOS上的~/Library/Application Support
userData
用于存储应用程序配置文件的目录,默认情况下是附加到您的appData
目录 应用程序的名称。temp
临时目录。exe
当前的可执行文件。module
libchromiumcontent
库。desktop
当前用户的桌面目录。documents
用户目录"我的文档"。downloads
用户下载目录。music
用户音乐目录。pictures
用户照片的目录。videos
用户视频的目录。logs
应用程序日志文件夹的目录。pepperFlashSystemPlugin
Pepper Flash插件系统版本的完整路径。
所以这些是您作为起始目录的选项。
更新:
this.$electron.remote.app.getAppPath()
将返回当前的应用程序目录。
load (path = this.$electron.remote.app.getAppPath()) {
path = join(path)
this.$store.dispatch('getContents', path).then(() => {
this.$store.commit('setPlacePath', path)
}, err => {
console.error(err)
this.$route.push('/')
})
}
更新2:
请注意我也是电子新手。似乎app.getPath方法用于获取路径应用程序正在运行。如果你想要一个不同的路径,你可以在那里硬编码。
示例:
注意' / home / rajind' 硬编码为路径参数的默认值。
在Place.js file
,
getContents ({ commit }, path = '/home/rajind') {
return new Promise((resolve, reject) => {
ls(path).then(contents => {
commit('setContents', contents)
resolve()
}, err => {
reject(err)
})
})
}
并在Place.vue
文件中,
load (path = '/home/rajind') {
path = join(path)
this.$store.dispatch('getContents', path).then(() => {
this.$store.commit('setPlacePath', path)
}, err => {
console.error(err)
this.$route.push('/')
})
}