Перейти до змісту

Delphi -йщики ! HELP!


Banzai

Рекомендовані повідомлення

есть любопытная прога с сорсами на делфях ... возникло желание конвертонуть либо накрайняк реализовать идею на сишарпе под НЕТом ...

застопорился на структуре packed record и ее описании в разделе имплементаций... выглядит ето чудо так -

unit scan;

Interface

uses windows,classes;

type

pdescriptor=^descriptor;

descriptor=packed record {file descriptor}

next: pdescriptor;

nf: integer;

case integer of

0:(bytes: int64);

1:(nc: integer; sub: pdescriptor; mark: boolean; name: string[255]);

end;

tscanthread=class(tthread)

d,no: integer;

scanned,usedspace: int64;

tree, recycled: pdescriptor;

done: boolean;

constructor create(drive: integer);

procedure execute; override;

procedure checkstate1;

end;

var

norec: pdescriptor;

implementation

,,,,,

особенно интригует ето -

pdescriptor=^descriptor;

descriptor=packed record {file descriptor}

next: pdescriptor;

nf: integer;

case integer of

0:(bytes: int64);

1:(nc: integer; sub: pdescriptor; mark: boolean; name: string[255]);

end;

-- насколько я понимаю pdescriptor - есть указатель на необъявленную переменную descriptor ....

descriptor=packed record - не финализорована ЕНДом .... (фигурные скобки - ето коммент)

case integer of - вообще мя выбил .... во первых интежер - етож базовый тип а не переменная ...???? - во вторых что собственно там будет выбираться??? - ведь в записи не обявлена такая переменная ...

кроме всего сильно путают ети рекурсивные обращения и декларации ....

в сумме в ету структуру должно записываться размер и имена каталогов и файлов при рекурсивном сканировании логического диска...

если нуна запощу прогу и сорсы

хелп ... я полагаю ето интересно для програмеров :D:D

Посилання на коментар
Поділитись на інші сайти

на сам "paked" можеш забити болт - це просто для економії пам'яті. а от з поперднім об'явленням типу в шарпі я не знаю що робити по причині незнайомства з шарпом.

далі, логіка така: якщо в тебе pdescriptor.nf=0 то добавляється поле bytes, якщо 1 - то поля nc: integer; sub: pdescriptor; mark: boolean; name: string[255]. end закриває опис структури. такий case дозволяється робити в кінці опису структури і він має бути єдиний для даного опису.

Посилання на коментар
Поділитись на інші сайти

ГРЭАТ СЭНКС! пойду думать как ето перевести на шарп ... синтаксис в нем весьма близок и паскалю и си но вот с описанием объектов и контролем типов в нем все намного строже... хм...

однако хитро придумано...

Посилання на коментар
Поділитись на інші сайти

RSDN.ru допоможе

Там програмери тусуються!

Посилання на коментар
Поділитись на інші сайти

RSDN.ru допоможе

Там програмери тусуються!

;) щось в мене воно не відкривається, зроби лінком, плз.

Посилання на коментар
Поділитись на інші сайти

З RSDN якісь проблеми: про це пишуть тут.

Посилання на коментар
Поділитись на інші сайти

  • 2 тижня потому...
на сам "paked" можеш забити болт - це просто для економії пам'яті. а от з поперднім об'явленням типу в шарпі я не знаю що робити по причині незнайомства з шарпом.

далі, логіка така: якщо в тебе pdescriptor.nf=0 то добавляється поле bytes, якщо 1 - то поля nc: integer; sub: pdescriptor; mark: boolean; name: string[255]. end закриває опис структури. такий case дозволяється робити в кінці опису структури і він має бути єдиний для даного опису.

хай ! еще вопросик... опиши плиз логику исполнения

pdescriptor=^descriptor;

descriptor=packed record

x:pdescriptor;

,,,

end

в плане того что есть ета запись и что есть pdescriptor? - как ето будет выглядеть в виде екземпляров структуры? короче плиз логику работы... ато я реально недогоняю...

pdescriptor вроде как ето неинициализированная переменная типа descriptor да? или тоже тип? ... хм... нерублю в делфях - караул...

Посилання на коментар
Поділитись на інші сайти

pdescriptor - указатель на переменную descriptor

Посилання на коментар
Поділитись на інші сайти

хм ... тоесть что получается? - что прога работает с переменной-записью которая все одна ? и только рекурсивно дописывает в нее новые поля?

микс! ты каданить щупал си шарп? - как ето перевести на него ? я голову сламал :ok2:

рекорды в делфях ето подобие класов и инициализацыей и екземплярами или нет?

Посилання на коментар
Поділитись на інші сайти

Увы.. СиШарп-а в глаза не видел... Как то не возникало надобности...

Посилання на коментар
Поділитись на інші сайти

ну не обязательно си шарп ... хотьбы си нетовый или простой...

да хоть бы на словах - как ето работает? какая логика?

Посилання на коментар
Поділитись на інші сайти

pdescriptor - указатель на переменную descriptor

я запамятовал ... ето в разделе type

...

ну ... указатель и ладно .. только под нэтом ето будет ансэйф код ... типа изза того что среда исполнения сама занимается сборкой мусора .. и может просто похерить область памяти в которой находится объект нашего указателя ... можно конечно выкрутится ... но дело не в етом ..

мне кажется что я ужо нащупал смысл ... он гдета рядом :)

собственно что хотим получить? - кучу либо стек, объектов либо записей-структур представляющих собой узлы (дескрипторы папок) и как часный случай листья - дескрипторы файлов ...

беда в том что в шарпе нельзя структуру финализировать кэйзом или аналогом его ...

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

не совсем понятно что есть переменные-указатели на дочерние субкаталоги ... вроде там поле то ксего одно а субкаталогов может быть немеряно.... ?

сорсы - смотреть пост №1

хм... внимательно повтыкал на сорс и вроде понял в чем прикол ... :)

Посилання на коментар
Поділитись на інші сайти

type

pdescriptor=^descriptor;

descriptor=packed record

var

x:pdescriptor;

воно десь так має бути...

pdescriptor - тип вказівника на тип descriptor. тип вказівника може описуватись раніше, ніж тип на який вказує pdescriptor.

Посилання на коментар
Поділитись на інші сайти

Заархівовано

Ця тема знаходиться в архіві та закрита для подальших відповідей.



×
×
  • Створити...