Using this way,
您将获得一个文件名列表,稍后您将能够按字母顺序对其进行排序,
这样你就可以用这个列表中的文件名处理每个文件 - 按字母顺序排列......
现在,如果在完成DirectoryIterator循环后,如果
你需要一个数组(按文件名按字母顺序排序),其中包含不仅是文件名,
以及所有其他文件属性,例如:
这里的问题是,在完成DirectoryIterator循环之前,您无法排序, 并且之后您将无法访问列表中的文件名以外的任何内容...
答案 0 :(得分:0)
DirectoryIterator对象提供了一种访问许多文件属性的简单方法。
$dir = new DirectoryIterator($path);
foreach ($dir as $fileInfo) {
if ((!$fileInfo->isDot())&&($fileInfo->GetExtension() == "txt")) {
/* You can access the file information inside this cycle */
$octal_perms = substr(sprintf('%o', $fileInfo->getPerms()), -4);
echo $fileInfo->getFilename() . " " . $octal_perms . "\n";
}
}
如果在完成DirectoryIterator循环后我们需要 fileInfo 对象,
我们必须将所有这些DirectoryIterator对象克隆(复制)到一个新数组中
然后按照DirectoryIterator对象的filename属性按字母顺序对此数组进行排序。
function cmp($a, $b)
{
return strcmp($a->getFilename(), $b->getFilename());
}
$dir = new DirectoryIterator($path);
foreach ($dir as $fileInfo) {
if ((!$fileInfo->isDot())&&($fileInfo->GetExtension() == "txt")) {
/* we need to clone a fileInfo object into array, not just assign it */
$allFilesInfo[] = clone $fileInfo;
}
}
/* Alphabetically sorting the array with DirectoryIterator objects, by filename */
usort($allFilesInfo, 'cmp');
foreach ($allFilesInfo as $fileInfo) {
/* Everything is alphabetical here ;) */
$octal_perms = substr(sprintf('%o', $fileInfo->getPerms()), -4);
echo $fileInfo->getFilename() . " " . $octal_perms . "\n";
}
^^在最后一个循环中,您可以按字母顺序处理文件,
虽然能够访问他们所有的财产:)
注意:如果发生崩溃,由"过多的打开文件导致"错误,
增加操作系统中每个进程的打开文件描述符的最大限制
相关配置文件取决于您的操作系统,通常它们存储在/ etc