![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Имя файла но короче.
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]
> есть ли в винде унекальные номера
их нет... даже больше... слова "унекальные" тоже нет..