Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Имя файла но короче.


OlegNik ©   (2009-06-22 13:36:00) 

Есть вопрос есть большой список файлов, с которыми надо работать. Пользовательская программа через общую память, создает список указывая полный путь файлов.
(образно говоря заполняет структуру
TRec = packed record
  Action : TAction;
  FullName : TString[97];
end;
)  
Но здесь есть две беды
если полное имя файла больше 97 байт
слишком здоровый объем приходится выделять под массив.
А теперь вопрос есть ли в винде унекальные номера (файловой таблице) файлов и функции по которым можно их получить?
FullNameToNum(S: String): Integer; DWord; или какая нибуть структурка. Ну обратная ей


Юрий Зотов   (2009-06-22 15:48:00) [1]

> OlegNik ©   (22.06.09 14:43) [6]

Цитата 1:
Мне не требуются тупые коментарии

Цитата 2: Я не понял где я что то дублирую

Цитата 3:
Делаю пример для очень умных ребяток.

'C:\мама мыла раму\дедка съел репку\мышка хвостом\унекальные исправить на уникальные\Pasp0001.dat';
......................
......................
'C:\мама мыла раму\дедка съел репку\мышка хвостом\унекальные исправить на уникальные\PaspN-1.dat';

число N может быть большим.


И резюме.

Как выяснилось давным-давно, еще в фильме "Повиг разведчика", диагноз "болван" Штюбингу был поставлен абсолютно верно. Потому что бедняга Штюбинг, сам написав 90%-ный дубликат, так и не понял, где же и что он дублирует.

Но почему-то даже после этого болваном Штюбинг счел не себя, а всех остальных. Тем самым показав, что болван двойной, да к тому же еще и хам.


Sapersky   (2009-06-22 15:41:00) [2]

У открытого файла есть Handle, который по сути 32-битный номер. Handle'ы эти, насколько помню, уникальны только на уровне процесса, но можно использовать DuplicateHandle для "конвертации".
Впрочем, постоянно держать все файлы открытыми - вряд ли хорошее решение. Лучше использовать то, что здесь предложили - [4], [5] (можно и без сжатия), [8].


Palladin   (2009-06-22 15:32:00) [3]

просто сплошной унекум какой то ))


капут   (2009-06-22 15:31:00) [4]


> OlegNik ©   (22.06.09 14:43) [6]
> Я не понял где я что то дублирую

'C:\мама мыла раму\дедка съел репку\мышка хвостом\унекальные исправить на уникальные\Pasp0001.dat';
......................
......................
'C:\мама мыла раму\дедка съел репку\мышка хвостом\унекальные исправить на уникальные\PaspN-1.dat';

Дублирование 'C:\мама мыла раму\дедка съел репку\мышка хвостом\унекальные исправить на уникальные\'

Различие 'Pasp0001.dat'


Cobalt   (2009-06-22 15:31:00) [5]

P.S. Указывай тогда все ограничения:
версия MSDos, версия Pascal и т.р.


Сергей М.   (2009-06-22 15:30:00) [6]


> Я не понял где я что то дублирую


А это что

> ' C:\мама мыла раму\дедка съел репку\мышка хвостом\унекальные исправить на уникальные\Pasp0001.dat';
> ' C:\мама мыла раму\дедка съел репку\мышка хвостом\унекальные исправить на уникальные\PaspN-1.dat';


?

Два раза фигурирует одно и тоже - и это, по-твоему, не дублирование ?)


Cobalt   (2009-06-22 15:30:00) [7]

> OlegNik ©   (22.06.09 13:36)  


Замени
FullName : TString[97];
на
FullName : String;
тогда проблема длинных имен файлов исчезнет сама собой.


Palladin   (2009-06-22 15:16:00) [8]

)))


Плохиш   (2009-06-22 15:13:00) [9]

В [4] уже сказали.


Игорь Шевченко   (2009-06-22 15:12:00) [10]


> можно ли заменить


Ты че, разрешения спрашиваешь ? Разрешаем.


OlegNik   (2009-06-22 15:11:00) [11]

Делаю пример для очень умных ребяток.

'C:\мама мыла раму\дедка съел репку\мышка хвостом\унекальные исправить на уникальные\Pasp0001.dat';
......................
......................
'C:\мама мыла раму\дедка съел репку\мышка хвостом\унекальные исправить на уникальные\PaspN-1.dat';
число N может быть большим. При этом общаю память по историческим причинам = 40kb
образно говоря зная NTFS хотя бы на уровне Palladinа можно предположить
что всеже есть уникальная нумерация файлов в таблице NTFS. ну и вопрос
стоял и стоит можно ли заменить 'C:\мама мыла раму\дедка съел репку\мышка хвостом\унекальные исправить на уникальные\Pasp0001.dat';
что то более компактное.


Игорь Шевченко   (2009-06-22 14:54:00) [12]


> Ваше предложение в части организации структуры


RTFM: ReadDirectoryChangesW

type
 FILE_NOTIFY_INFORMATION = packed record
   NextEntryOffset: DWORD;
   Action: DWORD;
   FileNameLength: DWORD;
   FileName: array[0..0] of WideChar;
 end;
 PFILE_NOTIFY_INFORMATION = ^FILE_NOTIFY_INFORMATION;


Palladin   (2009-06-22 14:47:00) [13]


> А что не нравится есть файл необходимо совершить над ним
> действие.

это вопрос или утверждение? или что вообще?


> Ваше предложение в части организации структуры.

TRec = packed record  
    Action : TAction;  
    FullName : String;
end;



> Мне не требуются тупые коментарии

Это не тупые комментарии, это комментарии к тупости.


OlegNik   (2009-06-22 14:43:00) [14]

Мне не требуются тупые коментарии есть вопрос нужен ответ.
И вероятнее пионеры не знают есть ли такой механизм или нет там зачем писать.
А капут я бы Power-ом пожал.
Palladin А что не нравится есть файл необходимо совершить над ним действие. Palladin  Ваше предложение в части организации структуры.


> Экономия памяти получается за счет списка каталогов. То
> есть, нет дублирования хранящейся информации.

Я не понял где я что то дублирую
array of TRec


капут   (2009-06-22 14:22:00) [15]

Все стринги в поток и 7зипом их, тогда будут мало места занимать. =)


Юрий Зотов   (2009-06-22 14:09:00) [16]

1. Заводим список каталогов (TStringList с DupIgnore).
2.
type
 TRec = packed record
   Action: TAction;
   DirIndex: integer; // Индекс в списке каталогов
   FileName: string[...]; // Только имя файла, без каталога
 end;

Экономия памяти получается за счет списка каталогов. То есть, нет дублирования хранящейся информации.


Anatoly Podgoretsky   (2009-06-22 13:56:00) [17]

> Palladin  (22.06.2009 13:51:01)  [1]

И TString тоже не наблюдается


Palladin   (2009-06-22 13:52:00) [18]

кто придумал эту структуру? по идее он должен быть уволен...


Palladin   (2009-06-22 13:51:00) [19]


> есть ли в винде унекальные номера

их нет... даже больше... слова "унекальные" тоже нет..


Наверх

Титульная страница Поиск, карта сайта Написать письмо