Расположите элементы адреса файла в правильном порядке com имя сайта http txt имяoffile

Обновлено: 04.07.2024

Временно измените текущий рабочий каталог на dir , примените функцию f и, наконец, вернитесь в исходный каталог.

Примеры

Возвратите имена в каталоге dir или текущем рабочем каталоге, если они не указаны. Когда join имеет значение false, readdir возвращает только имена в каталоге как есть; когда join имеет значение true, он возвращает joinpath(dir, name) для каждого имени, так что возвращаемые строки являются полными путями. Если вы хотите вернуть абсолютные пути, вызовите readdir с абсолютным путем к каталогу и установите для соединения значение true.

По умолчанию readdir сортирует возвращаемый список имен. Если вы хотите пропустить сортировку имен и получить их в том порядке, в котором их перечисляет файловая система, вы можете использовать readdir(dir, sort=false), чтобы отказаться от сортировки.

Аргументы ключевого слова join и sort требуют версии не ниже Julia 1.4.

Примеры

Возвращает итератор, который проходит по дереву каталогов каталога. Итератор возвращает кортеж, содержащий (rootpath, dirs, files). Дерево каталогов можно просматривать как сверху вниз, так и снизу вверх. Если walkdir или stat обнаружат ошибку IOError, она по умолчанию выдаст ошибку повторно. Пользовательская функция обработки ошибок может быть предоставлена ​​​​через аргумент ключевого слова onerror. onerror вызывается с IOError в качестве аргумента.

Примеры

Создайте новый каталог с именем path и режимом разрешений. Режим по умолчанию равен 0o777, измененный текущей маской создания файла. Эта функция никогда не создает более одного каталога. Если каталог уже существует или некоторые промежуточные каталоги не существуют, эта функция выдает ошибку. См. mkpath для функции, которая создает все необходимые промежуточные каталоги. Обратный путь .

Примеры

Создать все каталоги по указанному пути с режимом разрешений. Режим по умолчанию равен 0o777, измененный текущей маской создания файла. В отличие от mkdir, mkpath не выдает ошибку, если путь (или его часть) уже существует. Обратный путь .

Примеры

Создает символическую ссылку на цель с именем link .

В Windows символические ссылки должны быть явно объявлены как относящиеся к каталогу или нет. Если цель уже существует, по умолчанию тип ссылки будет определяться автоматически, однако, если цель не существует, эта функция по умолчанию создает символическую ссылку на файл, если для параметра dir_target не задано значение true . Обратите внимание, что если пользователь устанавливает dir_target, но target существует и является файлом, символическая ссылка каталога все равно будет создана, но разыменование символической ссылки завершится ошибкой, точно так же, как если бы пользователь создал символическую ссылку на файл (вызвав symlink() с dir_target, установленным в false до создания каталога) и пытается разыменовать его в каталог.

Кроме того, существует два способа создания ссылки в Windows; символические ссылки и точки соединения. Точки соединения немного более эффективны, но не поддерживают относительные пути, поэтому, если запрашивается символическая ссылка относительного каталога (что обозначается isabspath(target), возвращающим false ), будет использоваться символическая ссылка, в противном случае будет использоваться точка соединения. Лучшей практикой создания символических ссылок в Windows является создание их только после того, как файлы/каталоги, на которые они ссылаются, уже созданы.

Эта функция вызывает ошибку в операционных системах, не поддерживающих программные символические ссылки, например Windows XP.

Аргумент ключевого слова dir_target был добавлен в Julia 1.6. До этого символические ссылки на несуществующие пути в Windows всегда были символическими ссылками на файлы, а относительные символические ссылки на каталоги не поддерживались.

Возвращает целевое местоположение, на которое указывает путь символической ссылки.

Изменить режим разрешений пути на режим . В настоящее время поддерживаются только целочисленные режимы (например, 0o777). Если recursive=true и путь является каталогом, все разрешения в этом каталоге будут рекурсивно изменены. Обратный путь .

До версии Julia 1.6 это не корректно манипулировало ACL файловой системы в Windows, поэтому в файлах устанавливались только биты только для чтения. Теперь он может управлять списками управления доступом.

Изменить владельца и/или группу пути к владельцу и/или группе . Если для владельца или группы введено значение -1, соответствующий идентификатор не изменится. В настоящее время поддерживаются только целочисленные владельцы и группы. Обратный путь .

Примитивный тип, обертывающий собственный файловый дескриптор ОС. RawFD могут быть переданы в такие методы, как stat, для получения информации о базовом файле, а также могут использоваться для открытия потоков, при этом RawFD описывает файл ОС, поддерживающий поток.

< td style="text-align: left">Идентификатор группы файла ow ner
НазваниеОписание
descПуть или дескриптор файла ОС
sizeРазмер (в байтах) файла
deviceID устройства, на котором находится файл
inodeНомер inode файла
modeРежим защиты файла
nlinkКоличество жестких ссылок на файл
uid Идентификатор пользователя владельца файла
gid
rdevЕсли этот файл относится к устройству, Идентификатор устройства, на которое он ссылается
blksizeФайл- предпочитаемый системой размер блока для файла
блокиКоличество такие блоки выделены
mtimeВременная метка Unix, когда файл был последнее изменение
ctimeВременная метка Unix, когда метаданные файла были изменено

То же, что stat , но для символических ссылок получает информацию о самой ссылке, а не о файле, на который она ссылается. Эта функция должна вызываться для пути к файлу, а не для файлового объекта или файлового дескриптора.

  • Grant-proposal-henry-edits-finalfinal.doc
  • Grant-proposal-final-Julia_edits_v4.doc
  • FINAL_proposal_Aug2016_kct-updated.doc

Это всего лишь один небольшой пример недостатка управления информацией, который может вызвать массу ненужных разочарований. Чем более организованно мы управляем информацией, будь то документы, электронные таблицы или мультимедиа, тем эффективнее и действеннее мы можем быть в нашей правозащитной деятельности. Вот почему соглашения об именах файлов так важны.

Соглашение об именах файлов — это систематический метод присвоения имен файлам, который облегчает их последующее извлечение. Согласованное и описательное соглашение позволит вам:

  • Узнавать содержимое файла, не открывая его
  • Находить и идентифицировать файлы, даже если они больше не находятся в исходной папке.
  • Легкий просмотр длинных списков файлов для инвентаризации или проверки их отсутствия.
  • Управлять файлами стало проще, даже если все они хранятся в одной центральной папке или каталоге.

Разработка соглашения об именах файлов

Имя файла может состоять из ряда описательных элементов, таких как ключевые слова, даты, идентификационные номера и т. д. Чтобы разработать соглашение об именовании файлов, вы должны решить, какие типы элементов следует включать и в каком порядке.< /p>

Например, соглашение об именах файлов может включать следующие компоненты в следующем порядке: [ГГММДД]_[Проект]_[Местоположение]_[Событие].xxx

Примеры имен файлов, основанные на этом примерном соглашении, могут быть такими:

  • 160301_HRC_Geneva_launch.jpg
  • 151208_Uwazi_Madrid_inception.pdf
  • 160219_OHCHR_Tunis_meeting.jpg

Ниже приведены некоторые рекомендации по созданию собственного соглашения об именах файлов.

1. Подумайте, как вы хотите сортировать и извлекать файлы

Как вы хотите сортировать и извлекать файлы? Ответ на этот вопрос поможет определить некоторые важные компоненты вашего соглашения об именах файлов. Имейте в виду, что сортировка файлов выполняется слева направо.

  • Начните имя файла с самого важного параметра. Это позволит вам организовать файлы в алфавитном или хронологическом порядке по этому параметру без необходимости выполнять какой-либо поиск. Например, если основным способом доступа к файлу судебного дела является его номер, то он должен быть первым элементом в вашем соглашении об именовании файлов: когда вы сортируете свои документы в файловом менеджере, вы сначала увидите их по номеру дела.
  • Для дат используйте ГГГГ-ММ-ДД (или ГГГГММДД, или ГГММДД, или ГГММ). Чтобы обеспечить сортировку файлов в правильном хронологическом порядке, наиболее значимые компоненты даты и времени должны отображаться первыми, а затем наименее значимые компоненты. Если все остальные слова в имени файла совпадают, это соглашение позволит нам сортировать по году, затем по месяцу, а затем по дате. В некоторых соглашениях дата указывается перед каждым именем файла, потому что это наиболее логичный способ извлечения файлов для их команды.
  • Отметить разные версии одного и того же файла.Если файл будет поддерживаться с течением времени, используйте условное обозначение v1, v2, v3 и т. д., чтобы обозначить его место в последовательности версий. Вы можете отделить букву «v» от типа контента символом подчеркивания («_») или дефисом («-»). По мере создания и обновления версий меняйте версию, но сохраняйте имя файла прежним.
  • Не забывайте нули, если вам нужны порядковые номера. Если будет более девяти файлов с одинаковыми именами (например, в случае версии или в серии фотографий), убедитесь, что вы настроили номера следующим образом: 01, 02, 03, … Это позволит отсортировать их в хронологическом порядке. То же самое, если файлов более 99, это должно быть 001, …060, …099, …100

2. Используйте соответствующие компоненты в именах файлов, чтобы предоставить описание и контекст

Имена файлов должны содержать основные элементы каждого файла в зависимости от того, что подходит для ваших нужд поиска. Имена файлов должны существовать дольше человека, который первоначально назвал файл, поэтому подумайте, какая информация будет полезна кому-то через 15 лет. Потенциальные компоненты для правозащитных организаций включают:

  • Название организации
  • Программа или тема
  • Тип документа
  • Географический охват
  • Дата или период
  • Язык документа
  • Тип содержания, например "счет" или "отчет"

Имейте в виду, что вы, скорее всего, захотите использовать согласованные сокращения для этих компонентов, чтобы имена файлов были короткими.

3. Держите имя файла разумной длины

Длинные имена файлов плохо работают с некоторыми типами программного обеспечения, поэтому лучше делать их короткими. Для этого вы можете рассмотреть следующее:

  • Сокращение года до двух чисел вместо четырех.
  • Сокращение компонентов имени файла (например, используйте «inv» вместо «invoice» или «fr» вместо «francais»)
  • Используйте как можно меньше слов, чтобы передать подлинность документа.

4. Избегайте специальных символов и пробелов

  • Подчеркивание (например, file_name.xxx)
  • Дефисы (например, имя-файла.xxx)
  • Без разделения (например, имя файла.xxx)
  • Верблюжий регистр, когда первая буква каждого раздела текста пишется с большой буквы (например, FileName.xxx)

5. Задокументируйте свое соглашение об именах файлов и привлеките других пользователей

Важно записать правила соглашения об именах файлов, чтобы они оставались согласованными. Если кто-то, кроме вас, дает имена файлам, то вдвойне важно документировать соглашение и хранить его в легкодоступном месте. Вы можете включить эту документацию в файл readme.txt в основной общей папке.

Вот два примера задокументированных соглашений об именах файлов от наших партнеров: один от Африканской комиссии по правам человека и народов (ACHPR), а другой от Международной комиссии юристов (ICJ).

Помимо текстовых файлов, вы также можете провести небольшое внутреннее обучение, чтобы объяснить, почему так важно использовать новое соглашение об именах файлов и как оно работает, или создать видео, в котором рассматриваются ключевые моменты соглашения.< /p>

Дополнительные ресурсы

Библиотеки Стэнфордского университета предлагают два иллюстративных тематических исследования для дальнейшего изучения соглашений об именах файлов:

Python Open File — как читать текстовый файл построчно

В Python есть несколько способов чтения текстового файла.

В этой статье я расскажу о функции open(), методах read(), readline(), readlines(), close() и ключевом слове with.

Что такое функция open() в Python?

Если вы хотите прочитать текстовый файл на Python, вам сначала нужно его открыть.

Это основной синтаксис функции open() в Python:

Имена файлов и правильные пути

Если текстовый файл и ваш текущий файл находятся в одном и том же каталоге ("папке"), вы можете просто указать имя файла в функции open().

Вот пример того, как оба файла находятся в одном каталоге:

Снимок экрана-2021-09-13-at-1.49.16-AM

Если ваш текстовый файл находится в другом каталоге, вам нужно указать правильный путь для текстового файла.

В этом примере файл со случайным текстом находится не в папке main.py :

Screen-Shot-2021-09-13-at-2.00.27-AM

Чтобы получить доступ к этому файлу в файле main.py, вы должны включить имя папки в имя файла.

Если у вас нет правильного пути к файлу, вы получите следующее сообщение об ошибке:

Screen-Shot-2021-09-13-at-2.03.33-AM

Очень важно отслеживать, в каком каталоге вы находитесь, чтобы можно было указать правильный путь.

Необязательный параметр Mode в open()

При работе с файлами существуют разные режимы. Режим по умолчанию — режим чтения.

Буква r означает режим чтения.

Вы также можете опустить mode= и написать просто "r".

Существуют и другие типы режимов, такие как "w" для записи или "a" для добавления. Я не буду подробно останавливаться на других режимах, потому что мы сосредоточимся только на чтении файлов.

Полный список других режимов можно найти в документации.

Дополнительные параметры для функции open() в Python

Функция open() может принимать эти необязательные параметры.

  • буферизация
  • кодирование
  • ошибки
  • новая строка
  • закрыть
  • открывалка

Чтобы узнать больше об этих необязательных параметрах, прочитайте документацию.

Что такое метод readable() в Python?

Если вы хотите проверить, можно ли прочитать файл, вы можете использовать метод readable(). Это вернет True или False .

В этом примере будет возвращено значение True, поскольку мы находимся в режиме чтения:

Снимок экрана-2021-09-13-at-3.36.37-AM

Если бы я изменил этот пример на режим "w" (запись), то метод readable() вернул бы False :

Что такое метод read() в Python?

Метод read() считывает все содержимое файла как одну строку. Это хороший метод, если у вас не так много содержимого в текстовом файле.

В этом примере я использую метод read() для вывода списка имен из файла demo.txt:

Screen-Shot-2021-09-13-at-2.43.59-AM

Этот метод может принимать необязательный параметр size. Вместо чтения всего файла будет прочитана только его часть.

Если мы изменим предыдущий пример, мы сможем распечатать только первое слово, добавив число 4 в качестве аргумента для read() .

Screen-Shot-2021-09-13-at-3.01.30-AM

Если аргумент размера опущен или если число отрицательное, то будет прочитан весь файл.

Что такое метод close() в Python?

Когда вы закончите чтение файла, важно закрыть его. Если вы забудете закрыть файл, это может вызвать проблемы.

Это пример закрытия файла demo.txt:

Как использовать ключевое слово with для закрытия файлов в Python

Один из способов убедиться, что ваш файл закрыт, — использовать ключевое слово with. Это считается хорошей практикой, поскольку файл закроется автоматически, а не вам придется закрывать его вручную.

Вот как переписать наш пример, используя ключевое слово with:

Что такое метод readline() в Python?

Этот метод читает одну строку из файла и возвращает ее.

В этом примере у нас есть текстовый файл со следующими двумя предложениями:

Если мы используем метод readline(), он напечатает только первое предложение файла.

Screen-Shot-2021-09-13-at-3.57.14-AM

Этот метод также принимает необязательный параметр размера. Мы можем изменить пример, чтобы добавить число 7 только для чтения и печати. ​​Это:

Screen-Shot-2021-09-13-at-4.08.03-AM

Что такое метод readlines() в Python?

Этот метод будет читать и возвращать список всех строк в файле.

В этом примере мы собираемся распечатать наши продукты в виде списка, используя метод readlines().

Снимок экрана-2021-09-13-at-4.19.23-AM

Как использовать цикл for для чтения строк из файла в Python

Альтернативой этим различным методам чтения может быть использование цикла for .

В этом примере мы можем распечатать все элементы файла demo.txt, перебирая объект в цикле.

Screen-Shot-2021-09-13-at-4.27.49-AM

Заключение

Если вы хотите прочитать текстовый файл на Python, вам сначала нужно его открыть.

Если текстовый файл и ваш текущий файл находятся в одном и том же каталоге ("папке"), вы можете просто указать имя файла в функции open().

Если ваш текстовый файл находится в другом каталоге, вам нужно указать правильный путь для текстового файла.

Функция open() принимает необязательный параметр режима. Режим по умолчанию — режим чтения.

Если вы хотите проверить, можно ли прочитать файл, вы можете использовать метод readable(). Это вернет True или False .

Метод read() будет читать все содержимое файла как одну строку.

Когда вы закончите чтение файла, важно закрыть его. Если вы забудете закрыть файл, это может вызвать проблемы.

Один из способов убедиться, что ваш файл закрыт, — использовать ключевое слово with.

Метод readline() читает одну строку из файла и возвращает ее.

Метод readlines() будет читать и возвращать список всех строк в файле.

Альтернативой этим различным методам чтения может быть использование цикла for .

Надеюсь, вам понравилась эта статья, и желаю удачи в вашем путешествии по Python.

Возвращает массив файлов и каталогов из каталога .

Параметры

Каталог, который будет просканирован.

По умолчанию сортировка осуществляется в алфавитном порядке по возрастанию. Если необязательный sorting_order установлен в SCANDIR_SORT_DESCENDING , то порядок сортировки будет алфавитным в порядке убывания. Если установлено значение SCANDIR_SORT_NONE, результат не сортируется.

Описание параметра контекста см. в разделе руководства о потоках.

Возвращаемые значения

Возвращает массив имен файлов в случае успеха или false в случае ошибки. Если каталог не является каталогом, то возвращается логическое значение false и генерируется ошибка уровня E_WARNING.

Журнал изменений

Версия Описание
8.0.0 контекст теперь можно обнулить.

Примеры

= '/tmp';
$files1 = скандир ( $каталог );
$files2 = скандир ($дир, 1);

print_r ( $files1 );
print_r ( $files2 );
?>

Приведенный выше пример выведет что-то похожее на:

Примечания

URL-адрес можно использовать в качестве имени файла с этой функцией, если включена оболочка fopen. См. fopen() для более подробной информации о том, как указать имя файла. См. Поддерживаемые протоколы и оболочки для получения ссылок на информацию о возможностях различных оболочек, заметок об их использовании и информации о любых предопределенных переменных, которые они могут предоставлять.

См. также

  • opendir() — открыть дескриптор каталога
  • readdir() — чтение записи из дескриптора каталога
  • glob() – находит пути, соответствующие шаблону.
  • is_dir() — сообщает, является ли имя файла каталогом
  • sort() — сортировка массива по возрастанию

Пользовательские заметки 37 заметок

Простой способ избавиться от точек, которые scandir() обнаруживает в среде Linux:

= '/path/to/my/directory' ;
$scanned_directory = array_diff ( scandir ( $directory ), array( '..' , '.' ));
?>

Вот мои 2 цента. Я хотел рекурсивно создать массив моей структуры каталогов. Я хотел легко получить доступ к данным в определенном каталоге, используя foreach. У меня получилось следующее:

функция dirToArray ( $dir )

$cdir = скандир ( $dir );
foreach ( $cdir as $key => $value )
<
if (! in_array ( $value ,array( "." , ".." )))
<
if ( is_dir ( $dir . DIRECTORY_SEPARATOR . $value ))
<
$result [ $value ] = dirToArray ( $dir . DIRECTORY_SEPARATOR . $value );
>
еще
<
$result [] = $value ;
>
>
>

вернуть $результат;
>
?>

Вывод
Массив
(
[subdir1] => Массив
(
[ 0] => file1.txt
[subsubdir] => Array
(
[0] => file2.txt
[1] => file3.txt
)
)
[subdir2] => Массив
(
[0] => file4.txt
>
)

Кто-то написал, что array_slice можно использовать для быстрого удаления записей каталога "." а также "..". Однако «-» — это допустимая запись, которая должна стоять перед ними, поэтому array_slice удалит неправильные записи.

Как я решил проблему с '.' и '..'

$x = scandir__DIR__; //любой каталог
foreach ($x as $key => $value) if ('.' !== $value && '..' !== $value) echo $value;
>
>
Просто и работает

Самый быстрый способ получить список файлов без точек.
= array_slice ( scandir ( '/path/to/directory/' ), 2 );

Для каталога, содержащего такие файлы, как (например) -.jpg, результаты scandir немного "странные" ;)

= '/somedir' ;
$files = scandir ( $dir );
print_r ( $files );
?>

Массив
(
[0] => -.jpg
[1] => .
[2] = > ..
[3] => foo.txt
[4] => somedir
)

Осторожно, сортировка осуществляется в порядке ASCII :)

Мне нужно было найти способ получить полный путь ко всем файлам в каталоге и всех подкаталогах каталога.
Вот мое решение: рекурсивные функции!

функция find_all_files ( $dir )
<
$root = scandir ( $dir );
foreach( $root as $value )
<
if( $value === '.' || $value === '..' )
if( is_file ( "$dir / $value") < $result []= "$dir / $value" ;continue;>
foreach( find_all_files ("$dir / $value" ) as $value )
<
$result []= $value ;
>
>
возврат $result ;
>
?>

Нужно было что-то, что могло бы возвращать содержимое одного или нескольких каталогов, рекурсивно или нерекурсивно,
для всех файлов или указанных расширений файлов, которые были бы
легко доступны из любой области или скрипта.

И я хотел разрешить перегрузку, потому что иногда мне лень передавать все параметры.
класс scanDir static private $directories , $files , $ext_filter , $recursive ;

// ------------------------------------------------------------ -------------------------------------------------- < br />// scan(dirpath::string|array, extensions::string|array, recursive::true|false)
static public function scan() // Инициализировать значения по умолчанию
self :: $ рекурсивный = ложь;
self :: $directories = array();
self :: $files = array();
я :: $ext_filter = false ;

// Проверяем наличие минимальных параметров
if(! $args = func_get_args ()) die("Необходимо указать строку пути или массив строк пути" );
>
if( gettype ( $args [ 0 ]) != "string" && gettype ( $args [ 0 ]) != "array" ) die( "Должен предоставить строку пути или массив строки пути");
>

// Проверяем, рекурсивное сканирование | действие по умолчанию: нет подкаталогов
if(isset( $args [ 2 ]) && $args [ 2 ] == true )

// Был ли включен фильтр по расширениям файлов? | действие по умолчанию: вернуть все типы файлов
if(isset($args[1])) if(gettype($args[1]) == "array")< self :: $ext_filter = array_map('strtolower' , $args [1]);>
else
if( gettype ( $args [ 1 ]) == "string" )< self :: $ext_filter [] = strtolower ( $args [ 1 ] );>
>

// Захват пути(ов)
self :: verifyPaths ( $args [ 0 ]);
вернуть себя :: $files ;
>

статическая приватная функция verifyPaths ( $paths ) $path_errors = array();
if(gettype ( $paths ) == "строка")

foreach($paths as $path) if(is_dir($path)) self :: $directories[] = $path;
$dirContents = self :: find_contents ( $path );
> else $path_errors [] = $path ;
>
>

// Вот как мы сканируем каталоги
static private function find_contents ( $dir ) $result = array();
$root = scandir ( $dir );
foreach( $root as $value ) if( $value === '.' || $value === '..' )
if( is_file ( $dir . DIRECTORY_SEPARATOR . $value ) ) if(! self :: $ext_filter || in_array ( strtolower ( pathinfo ( $dir . DIRECTORY_SEPARATOR . $value , PATHINFO_EXTENSION )), self :: $ext_filter )) self :: $files [] = $result [] = $ реж. DIRECTORY_SEPARATOR . $значение;
>
продолжить;
>
if( self :: $recursive ) foreach( self :: find_contents ( $dir . DIRECTORY_SEPARATOR . $value ) as $value ) self :: $files [] = $result [] = $ стоимость ;
>
>
>
// Возврат требуется для рекурсивного поиска
return $result ;
>
>
?>

Использование:
scanDir::scan(path(s):string|массив, [file_extensions:string|массив ], [подпапки?:true|false]);
//Сканировать один каталог на наличие всех файлов, без подкаталогов
$files = scanDir :: scan ( 'D:\Websites\temp' );

//Сканировать несколько каталогов на наличие всех файлов, без подкаталогов
$dirs = array(
'D:\folder' ;
'D:\folder2' ;
'D:\folder2' ;
'C:\Другое' ;
);
$files = scanDir :: scan ( $dirs );

// Сканировать несколько каталогов на наличие файлов с указанным расширением,
// нет подкаталогов
$files = scanDir :: scan ( $dirs , "jpg" );
//или с массивом расширений
$file_ext = array(
"jpg" ,
"bmp" ,
"png"
);
$files = scanDir :: scan ( $dirs , $file_ext );

// Сканируем несколько каталогов на наличие файлов с любым расширением,
// включаем файлы в рекурсивные подпапки
$files = scanDir::scan ( $dirs , false , true );

// Несколько каталогов с указанными расширениями включают файлы подкаталогов
$files = scanDir::scan ( $dirs , $file_ext , true );
?>

Scandir на стероидах:
На случай, если вы хотите отфильтровать список файлов или просто перечислить несколько уровней подкаталогов.

function dirList ( $path = "" , $types = 2 , $levels = 1 , $aFilter =array()) <
// возвращает массив указанных файлов/каталогов
/ / начать поиск в $path (по умолчанию текущий рабочий каталог)
// return $types: 2 => files; 1 => каталоги; 3 => оба;
// $levels: 1 => смотреть только в $path; 2 => $path и все дочерние элементы;
// 3 => $путь, дети, внуки; 0 => $path и все подкаталоги;
// меньше 0 => дополнение -$levels, ИЛИ все, начиная с -$levels вниз
// например. -1 => все, кроме $path; -2 => все потомки, кроме $path + children
// Оставшиеся аргументы представляют собой фильтрующий массив (список) регулярных выражений, которые работают с полным путем.
// Первый символ (перед '/' в регулярном выражении) '-' => НЕ.
// Первый символ (после возможного '-') 'd' => применяется к имени каталога
// Фильтры могут быть переданы как массив строк или как список строк
// Обратите внимание, что выходные каталоги имеют префикс '*' (делается в строке над возвратом)
$dS = DIRECTORY_SEPARATOR ;
if (!( $path = realpath ( $path ? $path : getcwd ()))) return array(); // неверный путь
// следующая строка избавляет от завершения \ на дисках (работает, поскольку c: == c:\ в PHP). ОК в *nix?
if (substr ($path,-1)==$dS) $path = substr($path,0,-1);
if ( is_null ( $types )) $types = 2 ;
если ( is_null ( $levels )) $levels = 1 ;
if ( is_null ( $aFilter )) $aFilter =array();

// последний аргумент может быть передан как список или как массив
$aFilter = array_slice ( func_get_args (), 3 );
if ( $aFilter && gettype ( $aFilter [ 0 ])== "массив" ) $aFilter = $aFilter [ 0 ];
$adFilter = array();
// теперь перемещаем фильтры каталогов в отдельный массив:
foreach ( $aFilter as $i => $filter ) // для каждого фильтра каталогов.
if (( $pos = stripos (" $filter " , "d" )) && $pos 3 ) < // следующая строка удаляет 'd'
$adFilter [] = substr ( $filter , 0, $pos-1). substr($filter, $pos);
отменить( $aFilter [ $i ]); >
$aFilter = array_merge ( $aFilter ); // сбросить индексы

$aRes = массив(); // результаты, $aAcc является аккумулятором
$aDir = array( $path ); // каталоги для проверки
на наличие ( $i = $levels > 0 ? $levels ++:- 1 ;( $aAcc =array())|| $i --&& $aDir ; $aDir = $aAcc )
while ( $dir = array_shift ( $aDir ))
foreach ( scandir ( $dir ) as $fileOrDir )
if ( $fileOrDir != "." && $fileOrDir != " .." ) <
if ( $dirP = is_dir ( $rp = " $dir$dS$fileOrDir " ))
if ( pathFilter (" $rp$dS " , $adFilter ))
$aAcc [] = $rp ;
if ( $i $levels - 1 && ( $types & ( 2 - $dirP )))
if ( pathFilter ( $rp , $aFilter ))
$aRes [] = ( $dirP ? "*": "" ). $ рп ; >
вернуть $aRes ;
>
?>

пример использования:
( "_" , NULL );
// все файлы, кроме .jpg и .Thumbs.db, будут найдены в каталоге c:\Photo
$aFiles = dirList ( 'c:\Photo' , _ , 0 , '-/\. jpg$/i' , '-/\\\\Thumbs.db$/' );
$aFiles = dirList(); // найти файлы в текущем каталоге
// в следующих строках будут найдены файлы .jpg в подкаталогах, отличных от фотографий, за исключением временных файлов Интернета
set_time_limit ( 60 ); // повторение с верхнего уровня может занять некоторое время
$aFiles = dirList( "c:\\" , _ , 0 , '/\.jpg$/i' , '-d/\\\\Photos ?$/i', '-d/Временный Интернет/i');
?>

Обратите внимание, что эта функция займет много времени при сканировании больших
структур каталогов (что является причиной использования фильтров '[-]d/. /'). ).

Чаба Габор из Вены

scandir() с соответствием регулярному выражению имени файла и параметрами сортировки на основе stat().

функция myscandir ($dir, $exp, $how = 'name', $desc = 0)
<
$r = array();
$dh = @ opendir ( $dir );
if ( $dh ) <
в то время как (( $fname = readdir ( $dh )) !== false ) <
if ( preg_match ( $exp , $fname )) <
$stat = stat("$dir / $fname");
$r [ $fname ] = ( $how == 'имя' )? $fname : $stat [ $how ];
>
>
closedir ( $dh );
if ( $desc ) <
arsort ( $r );
>
else <
сортировать ( $r );
>
>
возврат( array_keys ( $r ));
>

$r = myscandir('./book/', '/^article6\.txt$/i', 'ctime', 1);
print_r ($r);
?>

файлы можно сортировать по имени и атрибутам stat(), по возрастанию и убыванию:

имя имя файла
номер устройства dev
номер инода ino
режим инода режима защиты
nlink количество ссылок
uid userid владельца
gid groupid владельца
тип устройства rdev, если устройство inode *
размер размер в байтах
atime время последнего доступа (отметка времени Unix)
mtime время последней модификации (отметка времени Unix)
ctime время последнего изменения индекса (метка времени Unix)
blksize размер блока файловой системы IO *
blocks количество выделенных блоков

/**
* Эта функция будет рекурсивно сканировать все файлы во вложенной папке и папке.
*
* @author Fazle Elahee
*
*/

if(!empty($lists))
foreach($lists as $f)

$path = "/var/www/SimplejQueryDropdowns";
$file_names = scanFileNameRecursivly($path);

Читайте также: