【发布时间】:2020-06-12 04:24:01
【问题描述】:
我正在尝试使用 React.js 编写一个 electron 应用程序,该应用程序访问文件系统。
这是我的fileWalker.js:
const path = require('path');
const fs = require('fs');
function *walkFolders (folder, recurseLevel = 0) {
try {
const files = fs.readdirSync(folder);
for (const file of files) {
try {
const pathToFile = path.join(folder, file);
const stat = fs.statSync(pathToFile);
const isDirectory = stat.isDirectory();
if (isDirectory && recurseLevel > 0) {
yield * walkFolders(pathToFile, recurseLevel - 1)
}
else {
yield {
rootDir: folder,
fileName: file,
isDir: isDirectory,
stat: stat
}
}
}
catch (err) {
yield {
rootDir: folder,
fileName: file,
error: err
}
}
}
}
catch (err) {
yield {
rootDir: folder,
error: err
}
}
}
export default walkFolders;
然后在我的App.js,我写道:
getFolders(absolutePath) {
let folders = [];
// check incoming arg
if (!absolutePath || typeof absolutePath !== 'string') {
return folders
}
for (const fileInfo of walkFolders(absolutePath, false)) {
// all files and folders
console.log(fileInfo);
if ('error' in fileInfo) {
console.error(`Error: ${fileInfo.rootDir} - ${fileInfo.error}`);
continue
}
// we only want folders
if (!fileInfo.isDir) {
continue
}
const node = this.createNode(fileInfo)
folders.push(node)
}
return folders
}
...
componentDidMount() {
this.getFolders("E:/gits");
}
constructor(props){
super(props);
this.getFolders=this.getFolders.bind(this);
...
}
...
但我收到此错误:
TypeError: fs.readdirSync is not a function
我该如何解决这个问题?
【问题讨论】:
-
新建一个文件,写两行,
const fs = require('fs'); const files = fs.readdirSync('/');运行,看看会发生什么? -
@JimJin 什么都没发生..
-
那么,这意味着
fs.readdirSync()工作正常。如果你想在你原来的项目中找出罪魁祸首,我推荐你一种类似于二分查找的方法。你可以把你的代码注释掉一半,看看错误是否仍然存在。如果是,继续评论提醒的一半。如果没有,用同样的方法在注释的那一半找到它。 -
@JimJin ,当我将同一行放入反应代码中时,出现错误,请参阅:i.stack.imgur.com/diT2e.png