Суббота, 05.10.2024, 01:05 Приветствую вас Гость | Группа "Гости" 
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: xXxSh@dowxXx, Anton93, Волк-1024  
Динамический массив строк
toorookДата: Пятница, 02.01.2015, 18:09 | Сообщение # 1
Был не раз
Зарегистрирован: 04.09.2014
Группа: Пользователи
Сообщений: 11
Статус: Offline
Привет народ! Надо найти файлы в заданном каталоге. Задача такова что, мне нужно записать все полные пути файлов в массив. Так как я не знаю заранее сколько файлов будет, решил использовать динамические массивы. Вот моя процедура:
Код

procedure ScanDir(StartDir: string; Mask: string; list: array of string);
var
   SearchRec: TSearchRec;
   i: integer;
begin
   i:= 0;
   if Mask = '' then
     Mask := '*.*';

   if StartDir[Length(StartDir)] <> '\' then
     StartDir := StartDir + '\';

   if FindFirst(StartDir + Mask, faAnyFile, SearchRec) = 0 then
     begin
       repeat
         if (SearchRec.Attr and faDirectory) <> faDirectory then //если не папка
           begin
               i := Length(list);
               SetLength(list, Succ(i));
               list[i]:=StartDir + SearchRec.Name; //добавляем файл в динамичский массив!
           end
         else
           if (SearchRec.Name <> '..') and (SearchRec.Name <> '.')then
             begin //если папка, но не текущая и не та которая уровнем выше
               i := Length(list);
               SetLength(list, Succ(i));
               ScanDir(StartDir + SearchRec.Name + '\', Mask, list[i]); //ищем файлы в подкаталогах (или это сейчас не надо?)
             end;
         until FindNext(SearchRec) <> 0;
         FindClose(SearchRec); //очищаем структуру
     end;
end;

При компиляции выдает:
Цитата
[DCC Error] Unit1.pas(45): E2008 Incompatible types

на строки
Код
              SetLength(list, Succ(i));

В чем может быть проблема?
Читал docs.embarcadero.com, но так и не понял, что у меня в коде не совместимо.


mr.toorook@jabber.ru
 
NeoДата: Суббота, 03.01.2015, 09:46 | Сообщение # 2
Модератор
Зарегистрирован: 04.05.2010
Группа: Модераторы
Сообщений: 317
Статус: Offline
Для этого надо использовать специальные структуры данных "список" Вот,глянь.
А что бы не писать всё вручную,можно воспользоваться уже написанным кодом. Используй класс TStringList.
Процедуру поиска файлов я взял отсюда и чуток переделал.
Вот,что получилось:

P.S
Masks в uses)))
А если бы ты писал на C++,то там есть такая штука как STL и контейнер VECTOR


Сообщение отредактировал Neo - Суббота, 03.01.2015, 09:48
 
C@TДата: Суббота, 03.01.2015, 16:18 | Сообщение # 3
Авторитетный
Зарегистрирован: 06.03.2010
Группа: Модераторы
Сообщений: 265
Статус: Offline
Цитата Neo ()
А если бы ты писал на C++,то там есть такая штука как STL и контейнер VECTOR

давно мечтаю что бы на этом форуме был раздел с плюсами или хотя бы с шарпом, с радостью бы отвечал на вопросы по плюсам happy


 
toorookДата: Воскресенье, 04.01.2015, 14:16 | Сообщение # 4
Был не раз
Зарегистрирован: 04.09.2014
Группа: Пользователи
Сообщений: 11
Статус: Offline
Ок. Все круто. Заюзал TStringList. Вопрос немного не в тему, но все же. Данные о найденных файлах надо где то хранить. Пытался сохранить список в файл, но когда обьем строк ~500mb (столько прога выжирает RAM - надо бороться с этим...), все!
Код
filelist.SaveToFile('list_of_files.txt');

Не сохраняет. Ладно, думаю буду поочередно добавлять в файл найденные строки, но потом подумал, а что если моя прога запуститься у юзера у которого HDD 2Tb ??? И так файлик получиться мегабайт так ~100. Как я из него данные прочитаю? Разом однако не получиться.
Вопрос: Как сохранять большие объемы текстовых данных? И как их потом прочитать с наибольшей скоростью?


mr.toorook@jabber.ru
 
NeoДата: Воскресенье, 04.01.2015, 17:40 | Сообщение # 5
Модератор
Зарегистрирован: 04.05.2010
Группа: Модераторы
Сообщений: 317
Статус: Offline
Тогда мути динамический список,прога будет сохранять пути в него,а по окончании всё запишешь в файл...ну или кусками сохраняй в файл)))
 
xXxSh@dowxXxДата: Воскресенье, 04.01.2015, 22:49 | Сообщение # 6
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
Цитата C@T ()
давно мечтаю что бы на этом форуме был раздел с плюсами или хотя бы с шарпом, с радостью бы отвечал на вопросы по плюсам

Согласен, в идеале нужно переориентировать или точнее чуть чуть расширить форум из разряда "Вирусология взгляд из Delphi" в "Вирусология взгляд из Delphi & C" или "Вирусология взгляд из Delphi & C++"
 
  • Страница 1 из 1
  • 1
Поиск:

delphicode.ru © 2008 - 2024 Хостинг от uCoz