Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Порядок файлов в ФС, Порядок файлов в файловой системе 
:(
    Опции темы
Чучмек
Дата 10.5.2012, 03:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 7
Всего: 41



Вот переписал
Код

function TFATclass1.SaveSortedFolder(Folder: TContentFATFolder): integer;
var
  nCurrentCluster:cardinal;
  n:cardinal;
  rc,ir,psc:cardinal;
begin
if Folder.pID<>ID then
 begin
 result:=crs_NoBelong;
 exit;
 end;
result:=0;
rc:=ClusterSize div sizeof(TFATNameFileHeader);
Folder.nr:=0;     // неудобно использовать getFirst
Folder.nf:=0;
if (FATtype = cft_FAT16)and Folder.isRootDirectory then
  begin
  nCurrentCluster:=2;
  psc:=ROOT;
  ir:=0;
  while ir<FATFirstSector.BPB.Root do
   begin
   if FATFirstSector.BPB.Root<(rc+ir)then ReadCluster(psc,nCurrentCluster,ClusterBuf); //Если размер корневого каталога не кратен размеру кластера
   for n:=0 to rc-1 do
    begin
    inc(ir);
    PFATNameFileHeader(cardinal(ClusterBuf)+n*sizeof(TFATNameFileHeader))^:=Folder.GetNext;
    if ir>=FATFirstSector.BPB.Root then break;
    end;
   SaveCluster(psc,nCurrentCluster,ClusterBuf);
   inc(nCurrentCluster);
   end;
  end else
   begin
   nCurrentCluster:=Folder.FFirstCluster;
   psc:=dClusters;
   while {(nCurrentCluster<>LastClusterCode)and}(nCurrentCluster>=2)and(nCurrentCluster<=MaxNextClusterCode) do
    begin
    for n:=0 to  rc-1 do
    PFATNameFileHeader(cardinal(ClusterBuf)+n*sizeof(TFATNameFileHeader))^:=Folder.GetNext;
    SaveCluster(psc,nCurrentCluster,ClusterBuf);
    nCurrentCluster:=getClusterInfo(nCurrentCluster);
    end;
   end;

end;


Нашел еще один бок - Если у файла без LFN контрольная сумма равна 0,то поле FileName структуры TFileHeader не заполняется, поскольку SFN такого файла воспринимается как завершение цепочки LFN
Код

procedure TContentFATFolder.ADD(NFH:TFATNameFileHeader);
...
if (FileHeaders[FCount].n<>0)or(FileHeaders[FCount].Chksum<>sum)then 
 
sum=0, а n и Chksum у вновь добавленного элемента массива FileHeaders могут содержать все что угодно, и очень даже вероятно что ноль.

Unit во вложении заменил на исправленный. 


Это сообщение отредактировал(а) Чучмек - 10.5.2012, 03:54


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0422 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.