我有一个关于scandir
函数排序的基本问题。到目前为止,我阅读了POSIX readdir
的手册页,但未找到有关订购保证的具体信息。
但是当我遍历大目录(无法更改,只读)时,我在多个系统上观察到相同的结果(Fedora 24和Ubuntu 16.04)。
这种行为的原因是什么?我可以在哪里阅读更多信息?
如果我需要包含排序,我应该在POSIX scandir周围编写自己的包装器,还是有人知道python的现有实现?
答案 0 :(得分:2)
readdir
的手册页是明确的:
连续调用读取文件名的顺序 readdir()取决于文件系统的实现;不太可能 名称将以任何方式排序。
在大多数实现中,目录是顺序列表条目,readdir
和scandir
都遵循基础顺序。如果您在不同的Linux版本上使用类似的文件系统,并以相同的顺序填充目录,则readdir
可能也会给出相同的顺序。如果您不添加,删除或重命名任何文件(至少一旦文件系统稳定,因为有些可能会延迟某些操作),顺序不是随机的,绝对是确定性和可重现的。简单来说,文件名不是可预测的。
因此,如果您想要一致的订单,您必须处理订购。
答案 1 :(得分:0)
要回答问题的第二部分,以下是一种实现方式:
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { Ionic2RatingModule } from "ionic2-rating";
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
rate : any = 0;
constructor(public navCtrl: NavController) {
}
onModelChange(event){
this.rate = event;
console.log(event);
}
}
在这里使用listdir()而不是scandir()来获取名称列表作为字符串,这比scandir()返回的DirEntry对象更容易排序。