Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];

Вниз

Поистине ламерский вопрос о типе "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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.055 c
2-1175695555
Magedon
2007-04-04 18:05
2007.04.22
Как добавить свой пункт в контекстное меню Ворда?


15-1174644621
Post_
2007-03-23 13:10
2007.04.22
Крякалка


2-1175339108
Xmen
2007-03-31 15:05
2007.04.22
QuickReport


2-1175711064
kingsoft
2007-04-04 22:24
2007.04.22
Image и ScrollBar


1-1172150843
Deeman
2007-02-22 16:27
2007.04.22
Диалог выбора файлов и папок





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский