1
+ var fs = require ( 'fs' ) ;
2
+ var path = require ( 'path' ) ;
3
+
4
+ //解析需要遍历的文件夹,我这以E盘根目录为例
5
+ var filePath = path . resolve ( '/Users/liguanliang1/Desktop/workspace' ) ;
6
+
7
+ const arr = [ 22 , 2 , 1324 , 45 , 5 , 46 , 6 , 546 , 565 , 34 , 22 , 1 ]
8
+ let target = [ ]
9
+ arr . forEach ( ( size ) => { const data = { size } ; insertArr ( target , data ) } )
10
+
11
+ function insertArr ( arr , data ) {
12
+ const { size, filedir } = data
13
+ if ( arr . length < 1 ) {
14
+ arr . push ( data )
15
+ return
16
+ }
17
+
18
+ let i = arr . length - 1 ;
19
+ if ( size < arr [ i ] . size ) {
20
+ arr . push ( data )
21
+ return
22
+ }
23
+
24
+ if ( size > arr [ 0 ] . size ) {
25
+ arr . unshift ( data )
26
+ return
27
+ }
28
+
29
+ while ( size > arr [ i ] . size ) {
30
+ if ( size >= arr [ i ] . size && size <= arr [ i - 1 ] . size ) {
31
+ target = [ ...target . slice ( 0 , i - 1 ) , data , ...target . slice ( i - 1 , target . length ) ]
32
+ break
33
+ }
34
+ i --
35
+ }
36
+
37
+ // console.log(...target.slice(0,i))
38
+ // target = [...target.slice(0,i), data, ...target.slice(i, target.length)]
39
+ }
40
+ console . log ( target )
41
+ //调用文件遍历方法
42
+ // fileDisplay(filePath);
43
+ let count = 1 ;
44
+ /**
45
+ * 文件遍历方法
46
+ * @param filePath 需要遍历的文件路径
47
+ */
48
+ function fileDisplay ( filePath ) {
49
+ //根据文件路径读取文件,返回文件列表
50
+ fs . readdir ( filePath , function ( err , files ) {
51
+ if ( err ) {
52
+ console . warn ( err )
53
+ } else {
54
+ //遍历读取到的文件列表
55
+ files . forEach ( function ( filename ) {
56
+ //获取当前文件的绝对路径
57
+ var filedir = path . join ( filePath , filename ) ;
58
+ //根据文件路径获取文件信息,返回一个fs.Stats对象
59
+ fs . stat ( filedir , function ( eror , stats ) {
60
+ if ( eror ) {
61
+ // console.warn('获取文件stats失败');
62
+ } else {
63
+ var isFile = stats . isFile ( ) ; //是文件
64
+ var isDir = stats . isDirectory ( ) ; //是文件夹
65
+ if ( isFile ) {
66
+ // console.log(filedir);
67
+ }
68
+ if ( isDir && / n o d e _ m o d u l e s $ / . test ( filename )
69
+ && ! / ( s e n s e d ? | p r o | a n t | e l e m e n t ) / g. test ( filedir )
70
+ && stats . size / 1024 > 10 ) {
71
+ console . log ( filedir , stats . size ) ;
72
+
73
+ }
74
+ if ( isDir ) {
75
+ fileDisplay ( filedir ) ; //递归,如果是文件夹,就继续遍历该文件夹下面的文件
76
+ }
77
+ }
78
+ } )
79
+ } ) ;
80
+ }
81
+ } ) ;
82
+ }
83
+
84
+ // function getdirsize(dir, callback) {
85
+ // var size = 0;
86
+ // fs.stat(dir, function (err, stats) {
87
+ // if (err) return callback(err);//如果出错
88
+ // if (stats.isFile()) return callback(null, stats.size);//如果是文件
89
+
90
+ // fs.readdir(dir, function (err, files) {//如果是目录
91
+ // if (err) return callback(err);//如果遍历目录出错
92
+ // if (files.length == 0) return callback(null, 0);//如果目录是空的
93
+
94
+ // var count = files.length;//哨兵变量
95
+ // for (var i = 0; i < files.length; i++) {
96
+ // getdirsize(path.join(dir, files[i]), function (err, _size) {
97
+ // if (err) return callback(err);
98
+ // size += _size;
99
+ // if (--count <= 0) {//如果目录中所有文件(或目录)都遍历完成
100
+ // callback(null, size);
101
+ // }
102
+ // });
103
+ // }
104
+ // });
105
+ // });
106
+ // }
107
+
108
+ // getdirsize(filePath, (err, data) => {
109
+ // if (err) { return 1 }
110
+ // console.log(data / 1024 / 1024)
111
+ // })
0 commit comments