Руководство - Хранение данных в памяти
Этот пример собирает информацию о файлах в корневом каталоге зарегистрированного пользователя в структурированный связный список. На данный момент вывод не очень привлекателен, но мы возвратимся к этому примеру позже и сделаем его более дружественным.; В этом разделе описываются поля структуры или записи, главным образом используются целые числа, ; но обратите внимание на тип string для имени файла и тип quad для размера файла. Structure FILEITEM Name.s Attributes.i Size.q DateCreated.i DateAccessed.i DateModified.i EndStructure ; Теперь мы определяем новый список файлов, используя ранее определенную структуру ; и некоторые другие переменные, которые мы будем использовать позже. NewList Files.FILEITEM() Define.s Folder Define.l Result ; Эта функция получает корневой каталог вошедшего в систему пользователя. Folder = GetHomeDirectory() ; Открывает каталог, чтобы перечислить все его содержимое. Result = ExamineDirectory(0, Folder, "*.*") ; Если Result - истина (т.е. каталог открыть удалось), начинаем перечисление записей. If Result ; Цикл пока NextDirectoryEntry(0) не станет нулем - что означает, что больше нет записей. While NextDirectoryEntry(0) ;Если запись каталога - файл, а не папка. If DirectoryEntryType(0) = #PB_DirectoryEntry_File ; Добавить новый элемент к списку. AddElement(Files()) ; И заполнить его свойствами файла. Files()\Name = DirectoryEntryName(0) Files()\Size = DirectoryEntrySize(0) Files()\Attributes = DirectoryEntryAttributes(0) Files()\DateCreated = DirectoryEntryDate(0, #PB_Date_Created) Files()\DateAccessed = DirectoryEntryDate(0, #PB_Date_Accessed) Files()\DateModified = DirectoryEntryDate(0, #PB_Date_Modified) EndIf Wend ; Закрыть каталог. FinishDirectory(0) EndIf ; Показывает список в окне отладки (если нет ни одной записи в каталоге, на экран ничего не выведется). ForEach Files() Debug "Filename = " + Files()\Name Debug "Size = " + Str(Files()\Size) Debug "Attributes = " + StrU(Files()\Attributes) Debug "Created = " + StrU(Files()\DateCreated) Debug "Accessed = " + StrU(Files()\DateAccessed) Debug "Modified = " + StrU(Files()\DateModified) Next Files()
Далее, во-первых даты выводятся как простые числа - это не очень хорошо, поэтому давайте их преобразим в знакомый вид. Для этого нужно заменить последние три оператора Debug, как показано ниже:... Debug "Created = " + FormatDate("%dd/%mm/%yyyy", Files()\DateCreated) Debug "Accessed = " + FormatDate("%dd/%mm/%yyyy", Files()\DateAccessed) Debug "Modified = " + FormatDate("%dd/%mm/%yyyy", Files()\DateModified)
Функция FormatDate() принимает значение даты в собственном числовом формате PureBasic и отображает ее согласно заданной Вами маске. Таким образом, отображение даты на экране, становится более читаемым.... ; Сортируем список, путём упорядочения имён файлов в возрастающем алфавитном порядке (A, B, C, D...). SortStructuredList(Files(), #PB_Sort_Ascending, OffsetOf(FILEITEM\Name), #PB_String) ; Показывает список в окне отладки (если нет ни одной записи в каталоге, на экран ничего не выведется) ...
Эта команда берет структурированный связный список и сортирует его в порядке возрастания алфавита (#PB_Sort_Ascending) поля Name в структуре (OffsetOf (FILEITEM\Name)), которое является строковым значением (#PB_String).Навигация Руководства
< Обработка строк - Обзор - Ввод & Вывод >