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

> проблемы работы с директориями
ddn
сообщение 13.07.2010 9:12
Сообщение #1





Группа: Пользователи
Сообщений: 6
Пол: Мужской

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


Есть много вопросов по работе в BP7, TMT (3.90), FPC (2.4.0.i386-win32) под WinXP:
1) верно ли, процедуры FindFirst и FindNext могут одновременно работать с несколькими директориями и даже с одной директорией через несколько указателей;
2) верно ли, что указатель поиска в директории определяется только записью файла SR (тип TSearchRec), но не директорией в которой она расположена, т.е. только по записи файла SR возможно непосредственно определить ее директорию и ее расположение в директории;
3) верно ли, что вызов FindNext(SR) возвращает в SR следующую запись (если она есть, если нет - SR неопределено или исходное значение?) в директории ее (исходной записи SR) расположения, а не в директории из последнего вызова процедуры FindFirst;
4) верно ли, что вызов FindClose(SR) прекращает поиск (работу с указателем) в директории расположения записи, а не в директории из последнего вызова процедуры FindFirst, поиск в других директориях не прекращается (непонятно, зачем вообще нужна эта процедура, если вся работа идет с данными из записи SR);
- без выполнения данных взаимосвязанных утверждений рекурсивный поиск в директориях НЕВОЗМОЖЕН (по крайней мере, без создания списков их содержимого),

далее:
5) верно ли, что путь к директории в вызове процедуры FindFirst должен заканчиваться разделителем '\';
6) возможна ли проверка существования файла, директории или лог. диска по его имени/полному_имени без использования процедур FindFirst и FindNext;
7) возможна ли работа с текущей директорией (получение абс. пути, изменение);
8) верно ли, что имена директорий SR.name в их записях SR из их наддиректорий не содержат разделителя '\';
9) верно ли, что записи в любой не изменившейся директории при каждой ее обработке процедурами FindFirst и FindNext выдаются в одном и том же порядке (лексикографическом по именам?);
10) как обеспечить работу с длинными именами файлов (как вызвать Win под FPC);
11) верно ли, что поле Time в TSearchRec - это время создания файла (если нет, как узнать/изменить время создания), или это время его последнего изменения/открытия;
12) что представляют собой неизвестные компилятору типы полей записи SR файла в директории под Win: TFileName (=string ?), THandle, TWin32FindData, каким характеристикам файла они и Fill (тип array[1..21] of Byte) отвечают;
Win32 target
type
TSearchRec = record
Fill : array[1..21] of Byte;
Attr : Byte;
Time : Longint;
Size : Longint;
Name : TFileName;
ExcludeAttr : Longint;
FindHandle : THandle;
FindData : TWin32FindData
end;


--------------------
взять бы всех программистов - да утопить
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 16.07.2010 10:08
Сообщение #2


Гость






Цитата
type идет после var, разве можно?
Как угодно можно. Количество блоков Var/Type/Const в программе не лимитируется, и порядок их расположения - тоже. Главное, чтобы все, что требуется нижестоящему блоку было уже описано в вышестоящем.

Цитата
continue - фи, неструктурно!
Зато эффективно... Я не страдаю догматизмом. Если кому-то не нравится использование goto там, где оно может помочь разгрузить программу от излишней "структурности" (например, выход из 4-х вложенных циклов. Я не буду для этого добавлять логические переменные и условия) - это его проблемы. Я в таком случае использую безусловный переход.

Если я в самом начале цикла вижу, что мне его продолжать не имеет смысла - я не оборачиваю все остальное в Else, я сразу вызываю Continue, и цикл прекрасно продолжается.

Цитата
Почему-то запуск fullcopydir('F:\T\', 'F:\G\', true) вне модуля program.
Ничего подобного. Посмотри внимательнее. Запуск FullCopyDir - это и есть вся основная программа, а все остальное - это описание самой процедуры FullCopyDir (вместе с ее подпрограммами).

Цитата
Зачем SizeOf(Buf) вычисляется каждый раз, разве размер памяти под значение Buf меняется?
cool.gif А ничего не вычисляется каждый раз. SizeOf вообще-то отрабатывает на этапе компиляции, ведь фактически размер переменной, которая назначена буфером, уже известен компилятору, если эту переменную можно использовать в качестве буфера. Так что здесь все в порядке, можешь SizeOf(i) на 1 не менять, не надо делать за компилятор его работу.

Цитата
volvo, вашу он прокомпилировал - 134666 b.
Когда отладишь программу, зайдешь в Options->Debugger, включишь опцию "Skip all debug symbols from executable", и "Skip debug information generation", получишь EXE-шник в 2 раза меньшего размера. Я в таких случаях поступаю проще: когда мне нужен отладчик - я пользуюсь IDE FreePascal-я, когда программа отлажена, и мне нужен EXE-шник без отладочной информации - я просто открываю исходник в SciTE, и компилирую его оттуда: Scite + компилятор , тогда никакой лишней информации в EXE-файле не присутствует... Мне так проще, чем переключать режимы компиляции постоянно.

Цитата
В то, что компилятор Дельфи (а не среда разработки) без багов как-то не вериться.
Семерка уже столько времени используется программистами... Там были, разумеется, баги, но они исправлялись, причем достаточно оперативно...
 К началу страницы 
+ Ответить 

Сообщений в этой теме
ddn   проблемы работы с директориями   13.07.2010 9:12
volvo   Ты для начала переведи то, что написано выше на но...   13.07.2010 9:46
ddn   (Dir1<>Dir2) FindFirst(Dir1+mask1, Attr1, SR...   13.07.2010 12:58
TarasBer   > (* Dir1 - директория расположения записи SR1 ...   13.07.2010 14:59
ddn   > (* Dir1 - директория расположения записи SR1 ...   13.07.2010 18:11
volvo   Если не работает - значит не должна. То, что должн...   13.07.2010 18:57
ddn   Я уже озвучил: селективное копирование файлов (в т...   13.07.2010 21:20
TarasBer   Ну может ручная развёртка хвостовой рекурсии и при...   14.07.2010 10:28
volvo   Ну да, процессор, ОС, все что угодно. Компилятор у...   14.07.2010 11:14
ddn   В общем случае. Рекурсия не только для вложенных п...   15.07.2010 10:02
Client   program fullcopydir( ...а указать имя программы?   15.07.2010 10:25
volvo   Если ты пишешь так, что у тебя получается результи...   15.07.2010 10:58
TarasBer   > В общем случае. Рекурсия не только для вложен...   15.07.2010 11:21
TarasBer   {$I+, Q+, R+, S+} program fullcopydir...   15.07.2010 11:59
Гость   а указать имя программы? fullcopydir и есть ее имя...   15.07.2010 13:31
volvo   В общем, так, ddn... [code=pas]{$mode delph...   15.07.2010 12:43
TarasBer   До меня дошло. program fullcopydir( dir1,...   15.07.2010 13:20
volvo   В таком случае ЭТО - не Паскаль. По крайней мере, ...   15.07.2010 13:36
TarasBer   > На Дельфи пока рано переходить, весит больше,...   15.07.2010 13:38
ddn   Вот блин, под гостем оставил. Там нужно исправить ...   15.07.2010 20:15
TarasBer   > Зачем SizeOf(Buf) вычисляется каждый раз, раз...   16.07.2010 9:12
volvo   Как угодно можно. Количество блоков Var/Type/Const...   16.07.2010 10:08


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

 



- Текстовая версия 18.07.2025 20:23
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"