我试图在Electron中创建一个桌面启动程序,读取用户桌面中的文件数量,并从每个找到的文件中收集信息。我正在收集文件并根据目录构造路径,但我能得到的只是文件名。我不知道如何存储文件本身并从中提取桌面图标。我没有看到很多解决方法,除了使用AxtiveXobject然而据说某些实现在最新的nodejs中不能工作。这是我目前的代码。
//requiring path and fs modules
const path = require('path');
const fs = require('fs');
//gets home directory
const homedir = require('os').homedir();
//specifies to desktop
const dir = `${homedir}/Desktop`;
var walk = require('walk');
var filepaths = [];
//storing desktop path
var desktopDir = dir;
console.log(desktopDir);
//gets the desktop files and paths
function getDesktopFiles(_dir){
//read directory
fs.readdir(_dir, (err, files) => {
if (err)
console.log(err);
else {
files.forEach(_file => {
//console.log(_file);
let _p = _dir + '/'+_file;
//changes slashing for file paths
let _path = _p.replace(/\\/g, "/");
filepaths.push(_path);
})
}
})
for(let p of filepaths){
console.log(p);
}
}
getDesktopFiles(desktopDir);
定义一个函数为相同的。
function load(icon) {
if (cache[icon]) return cache[icon];
return cache[icon] = fs.readFileSync(__dirname + '/public/icons/' + icon, 'base64');
}
这里 你可以得到同样的灵感。
下面是一段快速的代码,它在Electron渲染器过程中为我工作;它已经在macOS和Linux上成功地进行了测试,应该是独立于平台的。
它列出了用户桌面上的所有文件,并在HTML页面的最后显示每个文件的图标和名称;它使用了以下Electron API函数。
const { app, nativeImage } = require ('electron').remote;
const path = require ('path');
const fs = require ('fs');
//
const desktopPath = app.getPath ('desktop');
let filePaths = fs.readdirSync (desktopPath);
for (let filePath of filePaths)
{
app.getFileIcon (filePath)
.then
(
(fileIcon) =>
{
let div = document.createElement ('div');
let img = document.createElement ('img');
img.setAttribute ('src', fileIcon.toDataURL ());
let size = fileIcon.getSize ();
img.setAttribute ('width', size.width);
img.setAttribute ('height', size.height);
div.appendChild (img);
div.appendChild (document.createTextNode (" " + path.basename (filePath)));
// For test purposes, add each file icon and name to the end of <body>
document.body.appendChild (div);
}
);
}
你可能会发现一些有趣的提示,关于 app.getFileIcon
的帖子中。有没有一个标准的方法让Electron或Node.js应用访问系统级图标?