'./node_modules/formidable/.travis.yml',
'./node_modules/formidable/index.js',
'./node_modules/formidable/lib/file.js',
'./node_modules/formidable/lib/incoming_form.js',
'./node_modules/formidable/lib/index.js',
...
]
如果想要输出一种树形的结构,就可以对当前的递归程序进行改造,比如我想要输出如下的这种结果,那么,就要分析这种结构的特点:
bing.doc
img
|---1484234634801.png
|---1484234660592.png
|---test.png
inter.js
msg.txt
node_modules
|---formidable
|---.npmignore
|---.travis.yml
|---index.js
|---lib
|---file.js
|---incoming_form.js
|---index.js可以看出的规律:
第一层级的文件和文件夹前面是没有空格和字符的;
第一级子目录中的文件或文件夹前面是1组空格和1个字符;
第二级子目录中的文件或文件夹前面是2组空格和1个字符;
依次类推…
我们可以再传递一个depth来表示当前目录的层级,然后计算出前面空格的数量:
// depth为递归的深度,可根据递归的深度输出文件名称前面的格式
function readDirAll(path, depth){
// 获取字符串
var getLastCode = function(str){
return str.substr(str.length-1, 1);
} depth = depth || 0; // 默认为0
var fir_code = '';
// 计算文件名称前面的字符,4个空格为1组
for(var j=0; j<depth; j++){
fir_code += ' ';
}
depth && (fir_code += '|---');
var stats = fs.statSync(path);
if( stats.isFile() ){
console.log( fir_code+path );
}else if( stats.isDirectory() ){
var files = fs.readdirSync(path);
for(var i=0, len=files.length; i<len; i++){
var item = files[i],
itempath = getLastCode(path)=='/' ? path+item : path+'/'+item,
st = fs.statSync(itempath);
console.log( fir_code+item );
if( st.isDirectory() ){
var s = readDirAll( itempath, depth+1 );
}
}
}
}
console.log( readDirAll('./') );
3.2 删除目录
使用
fs.rmdir(path)是有局限性的,只能删除空目录,如果是个非空目录,我们可以根据上面的思路,写出一个能删除当前目录下所有的文件。递归,只要找到里面的文件夹就递归寻找,直到找到最底层,把最底层的文件删除,然后再逐级向上删除文件夹,直到删除到当前目录。
// 删除path下所有的文件和文件夹,包括path自己
function rmDirAll(path){
// 获取字符串
var getLastCode = function(str){
return str.substr(str.length-1, 1);
} var stats = fs.statSync(path); // 获取当前文件的状态









