IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

> Файлы
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 15

Репутация: -  0  +


Здравствуйте.
Нужна помощь... Как открыть файл, не зная его имя (задан только каталог, где находится)...
Заранее спасибо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Какие-то данные о файле все же нужны.
Открыть его можно, в следующих случаях:
  • В заданном каталоге один файл
  • У файла уникальные атрибуты. (например у всех "архивный" а у этого "скрытый")
  • Файл отличается от остальных расширением (или отсутствием такого)
  • Известен размер файла.
  • Известно время создания файла
  • Можно открыть по очереди все файлы в каталоге
Во всех этих случаях надо использовать процедуру
FindFirst и в некоторых случаях FindNext. Обе они находятся в модуле DOS.
То есть для их использования, подключаем его:
Код

Uses Dos, {... другие модули};
{...}

Вызывается процедура следующим образом:
в разделе переменных, надо описать переменную, с типом SearchRec
Например:
Код

Uses DOS;
{...}Var
 A: SearchRec;
{... другие переменные}

Теперь в программе мы можем вызвать процедуру FindFirst:
Код
{...}
Begin
 FindFirst('*.TXT',AnyFile,A);
 {...}
end.

Поясняю:
Мы ищем ПЕРВЫЙ файл с расширением TXT в текущем каталоге, который может иметь любые(AnyFile) атрибуты.
Данные о файле (если он найден), помещаются в переменную A (она имеет тип SearchRec). Тип SearchRec имеет следующую структуру:
Код
Type SearchRec = Record
 Fill : Array [1..21] Of Byte;
 Attr : Byte;
 Time : Longint;
 Size : Longint;
 Name : Array [0..12] Of Char;
End;

Если файл не найден, то в переменную DosError помещается код ошибки 18 (нет больше файлов).
Если нам надо продолжить поиск (какие-то условия нас не устраивают), то мы вызываем процедуру FindNext ...
Но для ее вызова уже не надо указывать тип искомых файлов( их маску и атрибуты). Процедура FindNext вызывается всегда только после FindFirst.

Теперь, когда нужный файл найден:
Код
{ связываем файловую переменную с именем этого файла }
Assign (f,a.name);
{ и открываем его }
Reset(f)

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


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Unreal   Файлы   16.06.2004 19:31
Altair   Какие-то данные о файле все же нужны. Открыть его …   16.06.2004 19:55
Unreal   Большое спасибо... Кстати, у меня последний случай…   16.06.2004 20:16
Altair   Пожалуйста :) В вашем случае (перебор всех файлов)…   16.06.2004 21:00
Unreal   FindFirst('*.TXT', AnyFile, A); ---> …   17.06.2004 7:18
Altair   Так стоп. Значит вы не правильно описали переменну…   17.06.2004 11:06
Unreal   Что там могло быть не правильно, я не осознал... Н…   17.06.2004 14:28
Altair   Так, я понял, что первая проблемма с несовместимос…   17.06.2004 17:31
Unreal   Скорее третья причина... А каким образом в типизир…   17.06.2004 20:01
Altair   Естественно ... :p5: Ой, кошмар какой! В ти…   17.06.2004 20:16
BlackShadow   Табуляция, насколько я помню, Олег, это выравниван…   17.06.2004 20:36
Altair   Ага, понял ,это у меня ассоциация табуляции и клав…   17.06.2004 20:53
Unreal   Такой еще вопрос: Создан ЕХЕ файл, при запуске кот…   18.06.2004 19:13
Altair   При связывании файла, надо не указывать полный пут…   18.06.2004 19:21
Unreal   Хорошо, а почему она обрабатывает только 10 файлов…   18.06.2004 19:52
Altair   2 причины: 1. Вы их 10 одновременно открываете. (с…   19.06.2004 8:33
Unreal   Есть ли процедура, с помощью которой текстовой фай…   19.06.2004 10:51
Altair   Открыть текстовый файл одновременно для чтения и з…   19.06.2004 17:33
BlackShadow   Oleg_Z, а Reset(TextoviyFile) что сделает?   21.06.2004 1:37
Unreal   -> BlackShadow... Если можно подробнее...   21.06.2004 10:21
BlackShadow   Var  f:Text;  s:String; Begin…   21.06.2004 14:55
Altair   Да, что-то я стормозил. (с кем не бывает) Если фай…   21.06.2004 16:45
BlackShadow   Я бы тоже не был так уверен... Текстовый файл по с…   21.06.2004 17:04
Altair   Я бы так не сказал, это между прочим есть оптимиз…   21.06.2004 17:13
BlackShadow   Попробуй, попробуй. Только не забывай, что String …   21.06.2004 17:17
Altair   Попробовал, не получилось. (дальше для тех, кому и…   21.06.2004 17:29
APAL   Может поиграться с "file of char;"?   21.06.2004 21:18
Altair   Попробовать можно ... Только потеряются особенност…   23.06.2004 11:36
BlackShadow   Не так уж и сложно написать что-нибудь типа Functi…   23.06.2004 14:55
Stream   А вы в курсе, что в типизированном файле чтение пр…   24.06.2004 9:40
Romtek   Stream, обоснуй.   24.06.2004 12:28
virt   romtek ну конечно не в тысячу ,но так как типизир…   24.06.2004 19:36
BlackShadow   Бред.   25.06.2004 15:56
P@sh@   точно бред, никакой проверки на корректность данны…   25.06.2004 19:50
BlackShadow   То же самое...   25.06.2004 20:01
Altair   Это бред! Если на то пошло, то наоборот, проц…   1.07.2004 16:37
BlackShadow   EOF и FileSize - это 2 разные вещи. Пояни про что …   1.07.2004 16:41
Altair   Конечно разные, я к тому что если использовать тек…   1.07.2004 17:00
BlackShadow   Oleg_Z прав. В общем случае EOF работает примерно …   1.07.2004 17:25
Altair   Кстати, а мне кажется есть хороший способ ускорить…   1.07.2004 17:30
BlackShadow   Почитай доку по переменной типа File. Точно в одно…   1.07.2004 17:35
Altair   У переменной типа FILE есть поля????? :blink: И…   1.07.2004 17:39
BlackShadow   Ты не того. Что такое File? эЭто что, что-то типа …   1.07.2004 17:44
Romtek   { Typed-file and untyped-file record }  FileRec …   1.07.2004 18:23
BlackShadow   Ну, судя по всему где-то в Private или UserData и …   1.07.2004 18:25
Altair   Надо -же я открыл для себя новою инфу. Правильно с…   1.07.2004 19:32
NetAnton   Вот на счет FILE здесь, Oleg_Z, ты правильно сказа…   1.07.2004 19:35
BlackShadow   Нечего над ним опыты ставить. Проще самому написат…   1.07.2004 19:39
Romtek   Народ, почаще заглядывайте в исходники модулей ТП.…   1.07.2004 20:21
BlackShadow   В таком случае скорость работы с файлом - очень ва…   1.07.2004 20:38
Romtek   В таком случае скорость работы с файлом - очень в…   1.07.2004 23:20


 Ответить  Открыть новую тему 
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.04.2024 21:37
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name