electron 创建文件管理器树

qxgroojn  于 2023-11-15  发布在  Electron
关注(0)|答案(1)|浏览(173)

我在做一个电子应用程序(html/css/js/nodejs),我现在做得很好,所以我想创建一个“树文件管理器”,这是我的应用程序类型的大多数概念中的一个重要功能。我希望能够创建删除,移动,重命名文件夹和文件夹中的内容我不想要一个现代的文件管理器,但至少要有一个功能。我已经搜索了好几天了什么都没有。请链接资源或解释我如何实现这一点。

xoshrz7s

xoshrz7s1#

Electron附带了Node.js,它具有强大的文件系统API,您可以使用文件管理器的所有功能。
我写了几个函数来帮助你开始:

  • getDirItemInfo()函数的作用是:为指定路径创建数据对象
  • getDirItems()函数获取目录的内容,并为每个项目创建一个数据对象。
const _path = require('path')
const fs = require('fs')

async function getDirItemInfo (path) {
  const basePath = _path.parse(path).base
  return await fetchItemObject(path, basePath)
}

async function getDirItems (dirPath) {
  return new Promise((resolve, reject) => {
    // Read directory and get items
    fs.promises.readdir(dirPath)
      .then(basePaths => {
        const statsPromises = basePaths.map(basePath => {
          const path = _path.join(dirPath, basePath)
          return fetchItemObject(path, basePath)
        })
        return Promise.all(statsPromises)
      })
      .then(contents => {
        // Remove items that couldn't be accessed (undefined, null, false) 
        contents = contents
          .filter(Boolean)
        resolve(contents)
      })
      .catch((error) => {
        console.log(error)
      })
  })
}

async function fetchItemObject (path, basePath) {
  try {
    let dirItemCount = null
    const stat = await fs.promises.lstat(path)
    const name = basePath === '' ? path : basePath

    if (stat.isDirectory()) {
      // Count dir items and ignore dirs that couldn't be accessed by readdir
      try {
        const dirItems = await fs.promises.readdir(path)
        dirItemCount = dirItems.length
      }
      catch (error) { 
        console.log(error)
      }
      stat.size = null
    } 

    return ({
      dirItemCount,
      name,
      path,
      stat
    })
  } 
  catch (error) { console.log(error) }
}

// USE FUNCTIONS:
let path1 = _path.normalize('E:/test/test.jpg')
let path2 = _path.normalize('E:/test')

fetchItemObject(path1)
  .then((result) => {
    console.log(result)
  })

getDirItems(path2)
  .then((result) => {
    console.log(result)
  })

字符串
您可以在其文档中找到所有Node.js文件系统API:
https://nodejs.org/api/fs.html

相关问题