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

Вниз

Имя файла но короче.   Найти похожие ветки 

 
OlegNik ©   (2009-06-22 13:36) [0]

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


 
Palladin ©   (2009-06-22 13:51) [1]


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

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


 
Palladin ©   (2009-06-22 13:52) [2]

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


 
Anatoly Podgoretsky ©   (2009-06-22 13:56) [3]

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

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


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

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

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


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

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


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

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


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

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


 
Palladin ©   (2009-06-22 14:47) [7]


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

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


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

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



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

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


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


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


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;


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

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

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


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


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


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


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

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


 
Palladin ©   (2009-06-22 15:16) [12]

)))


 
Cobalt ©   (2009-06-22 15:30) [13]

> OlegNik ©   (22.06.09 13:36)  


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


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


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


А это что

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


?

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


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

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


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


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

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

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

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


 
Palladin ©   (2009-06-22 15:32) [17]

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


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

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


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

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

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

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

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

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

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


И резюме.

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

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



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.034 c
2-1245426913
Alexander3
2009-06-19 19:55
2009.08.16
Структура в Dll


2-1245310635
wordmen
2009-06-18 11:37
2009.08.16
Как удалить символы перевода строки в Memo


15-1245438799
Johnnnnn
2009-06-19 23:13
2009.08.16
Доступ к книге excel на сервере?


2-1245418903
Student85236
2009-06-19 17:41
2009.08.16
ClientSocket в Таймере


2-1245521966
bred
2009-06-20 22:19
2009.08.16
ошибка при объявлении процедуры





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский