Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.22;
Скачать: CL | DM;

Вниз

Поистине ламерский вопрос о типе "file of TXRecord"   Найти похожие ветки 

 
Alexey (AZ)   (2007-03-30 20:51) [0]

Доброго компелирования!
Возник вопросик всвязи с использованием рудиментов от паскаля... Есть тип "филе оф ТДата" и работаю я с ним ч/з AssignFile, Reset, Rewrite, Seek и т.п. Вопрос здесь вот в чем: как бы проверить открыт ли файл, можно ли его ещё раз Assign... И было бы особо приятно делать system.CloseFile только в том случае, если "филе" ассигнуто :) если есть такая функция проверки, то было бы классно, ато с asm ... end; приходится выкручиваться.


 
Belorus ©   (2007-03-30 23:15) [1]

Расскажи пожалуйста, как ты с asm... end; выкручиваешься ?


 
_Аноним   (2007-03-30 23:43) [2]

зачем такие выкрутасы? почему не пользовать более современные методы?
Расскажите, пожалуйста


 
DrPass ©   (2007-03-30 23:57) [3]


> И было бы особо приятно делать system.CloseFile только в
> том случае, если "филе" ассигнуто :)

Если филе ассигнуто, то клозефиле делать не нужно. Клозефиле нужно делать только если филе ресетнуто, ревритнуто или аппенднуто


 
Германн ©   (2007-03-31 00:17) [4]


> аппенднуто

Никто, никогда ещё не смог аппенднуть филе оф ТДата :)


 
DrPass ©   (2007-03-31 01:15) [5]


> Германн ©   (31.03.07 00:17) [4]

В мире ваще много парадоксов


 
Palladin ©   (2007-03-31 01:35) [6]


> Германн ©   (31.03.07 00:17) [4]

если не смог аппендуть филе оф ТДата, то ревритнуть тем паче :)
у натУре... мир жесток...


 
Германн ©   (2007-03-31 02:19) [7]


> Palladin ©   (31.03.07 01:35) [6]
>
>
> > Германн ©   (31.03.07 00:17) [4]
>
> если не смог аппендуть филе оф ТДата, то ревритнуть тем
> паче :)
> у натУре... мир жесток...
>

Не понял, пппоясни. :)


 
Alexey (AZ)   (2007-03-31 12:21) [8]


> Расскажи пожалуйста, как ты с asm... end; выкручиваешься
> ?

Задача заключается в сравнеии хэндлов файлов, т.к. в контексте одного процесса не может быть два раза открыт один и тот же объект (файл) под одним хэндлом. Если наше филе открыто, то у нас есть его хендл. Филе закрываем - хендл освобождается и он же самый может быть выдан этому филе при следующем открытии (не всегда к сожалению).
Допустим есть класс, описан так и нам нужно найти хэндл нашего филе:
private
 f : file of TXData
 LastH : dword
...
Определив смещение f и LastH от начала структуры класса, можно набросать кодик:

procedure ТМегаКлас.КлозеФиле;
var
 resb : boolean;
begin
 asm
 MOV EDX, DWORD PTR DS:[EBX+$38]
 XOR EAX, EAX
 XOR EDX, [EBX+$184]
 SETNZ AL
 MOV EDX, DWORD PTR DS:[EBX+$38]
 MOV [EBX+$184], EDX
 MOV resb, AL
 end;
 if resb then
   System.CloseFile(f);
end;

В моем случае по смещению $38 находится f, что есть кстати говоря обычная структура, содержащая параметры открытия филе и его хэндл (у нас рукастое филе). А по смещению $148 находится LastH. Смещения - константы.
Т.к. если наше филе не было открыто, то бульён resb это будет знать и наше филе не будет закрыто :) Так может есть здесь человеческие функции проверки на открытость филе?
try...except стараюсь избегать, т.к. это лишние SEH.


 
Alexey (AZ)   (2007-03-31 12:22) [9]


> филе не будет закрыто

Соотв. не будет и ошибки.


 
app ©   (2007-03-31 12:50) [10]

> Alexey (AZ)  (31.03.2007 12:21:08)  [8]

С главной страницы форумов

Еще не хотелось бы видеть открытого коверканья русского языка, использования уличного сленга. Это конечно не наказуемо, но помните, что Ваши слова будут читать люди, которые с ними могут быть незнакомы, или они им просто неприятны.



Страницы: 1 вся ветка

Текущий архив: 2007.04.22;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.048 c
15-1175084101
homm
2007-03-28 16:15
2007.04.22
Зачем жескому диску кэш?


2-1175766834
delphi_
2007-04-05 13:53
2007.04.22
INI файл в DLL


3-1170165529
s_t_d
2007-01-30 16:58
2007.04.22
QReport - сохранение отчета(путь и имя файла)?


9-1145552442
JF
2006-04-20 21:00
2007.04.22
Материал в OGL


2-1175423128
I-New
2007-04-01 14:25
2007.04.22
Помогите написать плиз