2016-10-13 6 views

답변

6

ReadDir은 한 번에 하나의 항목 만 읽으므로 반복하기 전에 정렬 할 수 없습니다. readdir 시스템 콜은 정렬되어 있지 않습니다 (적어도 내가 아는 플랫폼에는 해당되지 않습니다. 즉, 휴대용 플랫폼이 아닐 수 있음을 의미합니다).

use std::fs; 

fn main() { 
    let mut paths: Vec<_> = fs::read_dir("/").unwrap() 
               .map(|r| r.unwrap()) 
               .collect(); 
    paths.sort_by_key(|dir| dir.path()); 
    for path in paths { 
     println!("Name: {}", path.path().display()) 
    } 
} 
+0

가끔씩,'readdir_sorted_by_name'과 같은 기본 시스템 호출이있을 수 있습니다. 그렇게하면 "한 번에 한 항목 씩 읽음"을 정렬 된 순서로 반환 할 수 있습니다. – Shepmaster

+0

@Shepmaster 일부 FS는 심지어 이전 정의로 정렬되므로 정렬 된 항목을 항상 반환합니다. –

4

내가 반복 이전 ReadDir 반복자를 정렬 할 수 있습니다

그래서 유일한 옵션은 일종의 거기 Vec과로 읽는 것입니다?

기본적으로 아니요. macOS 및 Linux에서는 readdir_r function is used입니다. 이 is not guaranteed to return in any specific order. 일반적으로 파일 시스템에 대해 가장 빠르고 가장 쉬운 순서로 반환됩니다. 은 전화 할 때마다이 될 수 있습니다.

항목을 수집하고 정렬 한 다음 다시 반복해야합니다.

관련 문제