Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Для новичков > команда Dir |
Автор: Martisha 28.11.2008, 08:19 | ||
добрый день) вопрос такой: есть код, в котором сканируется папка и имена найденных в ней текстовых файлов добавляются в ListBox, что нужно добавить в код чтобы выводилась вместе с именем и дата создания файла? вот код:
|
Автор: mrbrooks 28.11.2008, 08:53 |
Martisha, в данном случае ты делаешь велосипед на мой взгляд. в VCL есть компонент FileListBox. Его свойство Drive - определяет диск Directory - определяет каталог - по умолчанию корневой Mask - определяет фильтрацию (в твоем случае - *.txt) |
Автор: AntonN 28.11.2008, 08:56 |
дата создания хранится в SearchRec.FindData.ftCreationTime, передавай еще одним параметром в EditFile() |
Автор: aleksh 28.11.2008, 09:04 |
у структуры TSearchRec помимо значения name есть и date, можно его через datetostr() передавать в listbox, например функцие EditFile() передавать еще одну переменную но все же, Martisha, уверенна, что именно это надо? |
Автор: Martisha 28.11.2008, 09:08 |
подробнее..если можно ![]() ятак делала, но вылазят ошибки( Добавлено через 45 секунд да, это очень нужно Добавлено через 5 минут и 6 секунд на date ругается |
Автор: aleksh 28.11.2008, 09:28 |
видмо память меня подводит. в справке по TSearchRec все довольно хорошо описано, есть там атрибут хранящий дату и время, в переменно, если не путаю, типа datetime, ее нужно отдельно в строку переводить, может по этому ошибки? |
Автор: Martisha 28.11.2008, 09:32 |
может.. сейчас почитаю) |
Автор: mrbrooks 28.11.2008, 09:37 | ||
о FileListBox кстати тоже ![]() |
Автор: Martisha 28.11.2008, 10:03 |
![]() |
Автор: Christoph 28.11.2008, 12:11 | ||
Там нету такого поля date FindData (Windows only) contains additional information such as the file creation time, last access time, and both the long and short file names. |
Автор: THandle 28.11.2008, 12:15 | ||
Дату и время хранит поле Time. ![]() |
Автор: aleksh 28.11.2008, 12:38 |
toTHandle: спасибо все таки, пора по новой инсталить делфи, а то как-то неловко, в самом деле... |
Автор: aleksh 28.11.2008, 13:01 |
конвертировать в нужный формат ![]() |
Автор: Christoph 28.11.2008, 13:13 |
FindData хранит время создания файла. Валер ты читал мой пост выше? Хотя написано что в Time хранться тоже время создания, надо проверить |
Автор: Martisha 28.11.2008, 13:57 | ||
я пробовала, только в результате выводится число имесяц правильно, а дальше какой то набор цифр Добавлено через 1 минуту и 26 секунд а с FindData сложнее, не совсем понятно как с ним работать Добавлено через 2 минуты и 5 секунд и всправке про FindData ненаписано практически ничего |
Автор: Christoph 28.11.2008, 14:17 |
с Time у меня выводит набор чисел...только через FindData нада, если получится выложу .... |
Автор: aleksh 28.11.2008, 14:22 |
Martisha, надо изменить формат вывода даты и времени, делфи под рукой нет, код привести не могу, но почитать об этом можно в справке по типу timedate (или datetime, где же моя память) |
Автор: THandle 28.11.2008, 14:24 | ||
Стоп. Что вам тут надо? Вывести дату файла? Так есть же функция FileDateToDateTime например:
|
Автор: Martisha 28.11.2008, 14:26 | ||||
вот такой вот код нашла, осталось только добавить в ListBox, чтоб рядом с названием файла отображалось:
Добавлено через 5 минут и 13 секунд THandle, мне нужнои дату и времясоздания папки получить и чтоб все это выводилось в ListBox, т.е. там должно выводиться название файла и имя.. Добавлено через 13 минут и 48 секунд
так только число выводит, а время как вывести? |
Автор: Rrader 28.11.2008, 14:43 | ||
Martisha, нашли мой старый код ![]()
P.S. Поправил |
Автор: Martisha 28.11.2008, 14:49 |
было бы неплохо, самой не получается разобраться( Добавлено через 2 минуты и 21 секунду ага)) Добавлено через 12 минут и 44 секунды вернее ее кто то ужеизменил и я уже нашла его) Rrader, помоги мне разобраться в своейпроцедуре, пока ничего не пойму |
Автор: Christoph 28.11.2008, 15:11 | ||||
Мой код медленее![]() Чтоб показать что мой код тупит допишу еще вот что
![]()
|
Автор: THandle 28.11.2008, 15:27 |
Christoph, твой код будет не слабо тупить на папках с большим количеством файлов при обновлении ListBox'а. Тут нужен Begin(End)Update. Где try..finally? Почему оформления такое корявое?)) |
Автор: Christoph 28.11.2008, 15:29 | ||
Это кто тебе сказал Rrader? ![]() |
Автор: CodeMonkey 28.11.2008, 15:38 |
http://transl-gunsmoker.blogspot.com/2008/11/blog-post_24.html. |
Автор: THandle 28.11.2008, 15:48 |
Christoph, ну а ты возьми попробуй свой код и код Rrader'а на папке Windows допустим. Там файлов много. Вот и посмотри на ListBox. Насчет оформления: разве хорошо оформлено? Почитай допустим это: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=802 Насчет try..finally - должно присутствовать при всех освобождениях ресурсов в том числе и FindClose. А вообще да, я Rrader'а поддерживаю ![]() |
Автор: Poseidon 28.11.2008, 16:57 | ||
![]() И оформление - это уже дело каждого. Строгих стандартов в оформлении нет. По мне так код сволне читаем. |
Автор: CodeMonkey 28.11.2008, 17:01 | ||
Поручишся? Поддерживаю THandle. Добавлено через 44 секунды ...за исключением случая, когда работаешь в команде или пишешь для других, как сейчас... |
Автор: Martisha 1.12.2008, 09:02 | ||||
Christoph, очень странно, при использовании вашего кода выходит совсем не та дата.. Rrader, пробовала использовать ваш старый код, но почему то в ListBox ничего не добавляется.. что означает эта строка? вернее куда добавляется строка S?
и эта еще:
|
Автор: Martisha 1.12.2008, 10:33 | ||||
почему то когда делаю так:
после выполнения
идет сразу в конецпроцедуры.. а если я комментю это выражение, то выводит в ListBox название папки а не файла и дату странную..год вообще нет тот(( почему так? |
Автор: aleksh 1.12.2008, 11:15 |
попробуй не комментить, а поставить тело цикла, после repeat первой строчкой |
Автор: CodeMonkey 1.12.2008, 11:34 | ||
|
Автор: Martisha 1.12.2008, 13:04 | ||||
так ошибки вылазят
а так, выдает дату..только она почему то одинаковая для всех записей и совсем даже не та( Добавлено через 3 минуты и 29 секунд мне вообще даже не дата важнее а время создания файла, как нибудь возможно время вытащить? часы, минуты там...это важно, как не знаю( дату то я сама могу, а вот часы и минуты не знаю как.. ![]() |
Автор: aleksh 1.12.2008, 13:59 |
в справке по типу TDateTime опмано как получать дату, а как время |
Автор: Rrader 1.12.2008, 14:15 | ||||
Проверьте и сравните эту дату с той, что в свойствах файла в проводнике. Должно совпадать.
|
Автор: Martisha 1.12.2008, 14:47 | ||
Rrader, так выводится текущее время, а не время создания папки ![]() дату я так вывела, причем она выводится отдельно в другом ListBox-е, что удобнее для меня в дальнейшей работе..вот со временем только не понятно.. ![]() вот вывод даты создания папки:
может что нибудь в моем коде добавить возможно для вывода времени? |
Автор: CodeMonkey 1.12.2008, 15:00 | ||
DateToStr заменить на TimeToStr |
Автор: Martisha 1.12.2008, 15:06 |
![]() пасибки всем))) вопрос закрыт! ![]() |
Автор: CodeMonkey 1.12.2008, 15:09 | ||||||
http://transl-gunsmoker.blogspot.com/2008/11/blog-post_8830.html. Добавлено @ 15:20
Неа, в первом варианте (как и Christoph) забыл из UTC перевести в местное время. Добавлено @ 15:24 1. Всё же используйте правильно try/finally:
2. SearchRec.Time - это время в формате DOS. Оно имеет низкую точность. Если вы сравните вывод своей программы с тем, что показывает Проводник - то увидите разницу в несколько секунд по времени. Лучше бы вам использовать метку времени записанную в SearchRec.FindData.ftCreationTime - это точное время.
3. Кроме того, TSearchRec.Time эквивалентно TSearchRec.FindData.ftLastWriteTime - т.е. последней дате модификации, а вовсе не времени создания файла. |
Автор: Martisha 1.12.2008, 15:40 |
CodeMonkey, спасибо, учту ![]() |
Автор: Martisha 1.12.2008, 15:56 | ||||
и все равно, так выдается не то время(..в принципе разница не существенна, так что пойдет и так! ![]() |
Автор: Rrader 1.12.2008, 16:00 | ||
Блин, точно, и с Folder ошибся ![]() |
Автор: CodeMonkey 1.12.2008, 16:17 | ||
А время создания часом не перепутали с временем последней модификации? SearchRec.Time - содержит именно время последней модификации и вы сказали, что этот вариант вас устроил. Но в самом вопросе вы просили время создания, поэтому вам написали с SearchRec.FindData.ftCreationTime - временем создания. Если всё же нужно время последней модификации, то берите ftLastWriteTime вместо ftCreationTime (ещё есть ftLastAccessTime - время последнего доступа). Добавлено через 1 минуту и 12 секунд Хорошо бы тогда показать, какое время выдаётся, какое вы ожидаете увидеть и почему вы ожидаете увидеть это время (где вы его узнали). |
Автор: Martisha 2.12.2008, 08:27 | ||||
CodeMonkey, почему то выдается время одинаковое для всех текстовых фалов..но ведь такого же не может быть!
наверное я ошиблась в формулировке, но то, что получилось меня устраивает..
обязательно попробую) Добавлено через 6 минут и 7 секунд CodeMonkey, действительно подошло)) ![]() |
Автор: Chinese 2.12.2008, 22:37 |
Уважаемые форумчане помогите чайнику организовать поиск файлов на диске. У меня не получается не один промер который здесь указан. Программа ищет на корне диска, а в каталоги и подкаталоги заходить нехочет помогите чайнику. У меня цель написать программу которая бы отлавиливала расширение Tmp и удаляла его. Помогите пожалуйста. |
Автор: THandle 2.12.2008, 22:44 |
Chinese, http://forum.vingrad.ru/sources/topic-205111.html Ну и в DRKB примеры должны быть. |
Автор: Chinese 2.12.2008, 23:50 |
В том то и дело что если ты говоришь *.* То поиск идёт везде, а если ставишь вместо звёздочек скажем *.TXT то он ищет только накорню, в каталоги и подкаталоги не глядит. |
Автор: CodeMonkey 3.12.2008, 10:08 |
Ну разумеется: расширения-то у каталогов нет. Под такую маску они не подходят. |
Автор: THandle 3.12.2008, 13:44 | ||
Chinese, вот что то типа такого, с проверкой на расширение. Только соответственно сделай вместо добавления в список удаление файла.
|
Автор: Chinese 5.12.2008, 20:53 | ||
Я не понял, где здесь проверяется расширение. Пожалуйста обясните как его проверять. пробывал сравнивать rSearchRec.Name с *.tmp, но он ничего не выдавал. Помогите. |
Автор: THandle 5.12.2008, 22:52 |
http://forum.vingrad.ru/faq/topic-212851.html |