Страница 2 из 12

Re: Текущие вопросы по Delphi

Добавлено: 25 фев 2008, 22:04
C_O_D_E
MOTOCoder писал(а):Приведите фрагмент кода, который не пошел.
Спасибо. попробую сама разобраться, если не добью, клятвенно обещаю обратиться ТОЛЬКО к Вам.
Еще раз большое спасибо.

Re: Текущие вопросы по Delphi

Добавлено: 25 фев 2008, 22:06
C_O_D_E
Serge_Bliznykov писал(а):Уважаемая, CODE.
Если нужна будет помощь с шифрацией/чтением зашифрованных файлов - милости прошу.
Кстати, если подключить бесплатную библиотечку криптования, то можно закрыть файлик совсем "по взрослому".... Хотя, имхо, в данном случае в этом нет необходимости.
Боюсь, как раз необходимость есть. если бы Вы кратко могли рассказать в чем суть этого закрывания, я бы была благодарна. именно от этого зависит конечная оценка моей курсовой работы. заранее спасибо.

Re: Текущие вопросы по Delphi

Добавлено: 25 фев 2008, 22:17
C_O_D_E
2 MOTOCoder
я ошиблась в описании. т.к. между именем и RECORD поставила : вместо =.
Спасибо.

Packed record

Добавлено: 26 фев 2008, 10:33
BBB
Для убыстрения доступа к полям записи обычно (а точнее, в зависимости от директивы $A ) производится выравнивание полей записи по слову/двойному слову/четверному слову. Т.е., говоря по-простому, в памяти, отводимой под экземпляр данной записи имеются неспользуемые "пустоты". Из-за этого таке увеличивается и размер (SizeOf) записи. Если при описании записи (record), добавлено ключевое слово packrd, то такое выравнивание не производится, и "пустоты" отсутсвуют.

Например, при выравнивании по слову запись:
type tRec = record
m_fld1 : byte;
m_fld2 : byte;
m_fld3 : byte;
end;

будет занимать 6 байт, а запись:
type tRec = packed record
m_fld1 : byte;
m_fld2 : byte;
m_fld3 : byte;
end;

будет занимать 3 байта.

Из хелп-а описание директивы выравнивания:

Код: Выделить всё

Type    Switch
Syntax  {$A+}, {$A-}, {$A1}, {$A2}, {$A4}, or {$A8}
        {$ALIGN ON}, {$ALIGN OFF}, {$ALIGN 1}, {$ALIGN 2},
        {$ALIGN 4}, or {$ALIGN 8}
Default {$A8}
        {$ALIGN 8}
Scope   Local
Remarks

The $A directive controls alignment of fields in record types and class structures.

In the {$A1} or {$A-} state, fields are never aligned. All record and class structures are packed.

In the {$A2} state, fields in record types that are declared without the packed modifier
and fields in class structures are aligned on word boundaries.

In the {$A4} state, fields in record types that are declared without the packed modifier
and fields in class structures are aligned on double-word boundaries.

In the {$A8} or {$A+} state, fields in record types that are declared without the packed
modifier and fields in class structures are aligned on quad word boundaries.

Record type field alignment is described in the Object Pascal Language Guide.
See Record types.

Regardless of the state of the $A directive, variables and typed constants are always
aligned for optimal access. In the {$A8} state, execution will be faster.

Re: Текущие вопросы по Delphi

Добавлено: 26 фев 2008, 15:34
MOTOCoder
Предполагал что-то подобное. Спасибо, очень полезная информация.

Re: Текущие вопросы по Delphi

Добавлено: 26 фев 2008, 20:12
C_O_D_E
Господа, не могу записать в обыкновенный текстовый файл. компилятор пропускает, а программа психует. выдает ошибку 123.

Код: Выделить всё

 AssignFile(F,'C:\...\IO.txt');
 Rewrite(F);
 Writeln (Namearray.Sname);
 Writeln (Namearray.Name);
 Writeln (Namearray.Group);
 CloseFile(F);

где f - в VAR'е описана как файловая переменная (TextFile).

Будьте добры, подскажите.

Re: Текущие вопросы по Delphi

Добавлено: 26 фев 2008, 20:31
MOTOCoder
C:\...\IO.txt - путь так и указан? Если так, то он никуда не указывает.
Попробуйте указать полный путь, или корректный относительный.
Кстати, лучше приводите не только коды ошибок, но и текстовое описание(если оно есть).
И еще-файл должен быть текстовым, или это очередная типичная задача на записи и типизированные файлы?

Re: Текущие вопросы по Delphi

Добавлено: 26 фев 2008, 20:33
C_O_D_E
Прошу прощения. не указала где именно ошибка:
ошибка идет на
Rewrite(f);
т.е. на следующую строку после Assign.

Это не задача на какой-либо вид файлов, это моя курсовая работа.

Re: Текущие вопросы по Delphi

Добавлено: 26 фев 2008, 20:43
MOTOCoder
Это явно ошибка ввода/вывода - код корректный, но система не смогла создать файл. Еще раз советую проверить путь. C:\...\IO.txt указывает вникуда.

Re: Текущие вопросы по Delphi

Добавлено: 26 фев 2008, 20:56
C_O_D_E
Спасибо. Вы как всегда правы. Полный путь прописала
Теперь ошибка 105 ("IO error 105"(c)), программа не хочет записывать в файл. т.е. ошибка на Writeln(...);