File tree Expand file tree Collapse file tree 1 file changed +28
-3
lines changed Expand file tree Collapse file tree 1 file changed +28
-3
lines changed Original file line number Diff line number Diff line change @@ -214,8 +214,26 @@ impl KVStore {
214
214
}
215
215
}
216
216
217
+ // 读取一个目录下的文件
218
+ fn read_dir ( path : & str ) -> Result < Vec < String > > {
219
+ // Rust 实现浏览文件
220
+ let dirs: Vec < String > = std:: fs:: read_dir ( path) ?
221
+ . flat_map ( |res| -> Result < _ > { Ok ( res?. path ( ) ) } )
222
+ . filter ( |path| path. is_file ( ) )
223
+ . flat_map ( |path| {
224
+ path. file_name ( )
225
+ . and_then ( OsStr :: to_str)
226
+ . map ( |s| s. to_string ( ) )
227
+ } )
228
+ . collect ( ) ;
229
+ dbg ! ( & dirs) ;
230
+ Ok ( dirs)
231
+ }
232
+
217
233
#[ cfg( test) ]
218
234
mod tests {
235
+ use std:: fmt:: Result ;
236
+
219
237
use super :: * ;
220
238
221
239
#[ test]
@@ -244,16 +262,23 @@ mod tests {
244
262
245
263
#[ test]
246
264
fn test_serde ( ) {
265
+ // 通过 serde_json 可以实现“流”方式的贪婪匹配对象(反序列化)
247
266
let data = b"[10] [1] [2]" ;
248
267
let de = serde_json:: Deserializer :: from_slice ( data) ;
249
268
let mut stream = de. into_iter :: < Vec < i32 > > ( ) ;
250
- dbg ! ( stream. byte_offset( ) ) ; // 0
269
+ dbg ! ( stream. byte_offset( ) ) ; // 0
251
270
dbg ! ( stream. next( ) ) ; // Some([10])
252
- dbg ! ( stream. byte_offset( ) ) ; // 4
271
+ dbg ! ( stream. byte_offset( ) ) ; // 4
253
272
dbg ! ( stream. next( ) ) ; // Some([1])
254
273
dbg ! ( stream. byte_offset( ) ) ; // 8
255
274
dbg ! ( stream. next( ) ) ; // Some([2])
256
- dbg ! ( stream. byte_offset( ) ) ; // 12
275
+ dbg ! ( stream. byte_offset( ) ) ; // 12
276
+ }
277
+
278
+ #[ test]
279
+ fn test_read_dir ( ) {
280
+ let res = read_dir ( "./" ) ;
281
+ dbg ! ( res) ;
257
282
}
258
283
}
259
284
You can’t perform that action at this time.
0 commit comments