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

Вниз

Что я делаю не так?   Найти похожие ветки 

 
Bad_B   (2007-08-25 22:53) [0]

Задача самая простая: поиск в папке файла размер которого меньше (к примеру) 1,5 кб и дописать в него инфу из мемо,
если же такого файла не найдено, то создать и записать.

Вот что сделал, не могу понять почему работает не верно (создает кучу пустых файлов).
var
i,h:integer;
f:Tsearchrec;
put:string;
hhh:textfile;

begin
randomize;
//задаем путь где искать и что искать
if FindFirst(extractfiledir(expandfilename("ads.s3m"))+"\*.htm",faAnyFile,f)=0 then
repeat
//имя и размер файла записываем в стринг грид
form1.sg1.Cells[0,form1.sg1.RowCount-1]:=f.Name;
form1.sg1.Cells[1,form1.sg1.RowCount-1]:=inttostr(f.size);
//если размер меньше 1,5 кб, то дописываем в него инфу из мемо
if f.size<=1500 then
begin
assignfile(hhh,extractfiledir(expandfilename("ads.s3m"))+"\"+f.Name);
//что б пользователь видел в какой файл дописывается
label2.Caption:=extractfiledir(expandfilename("ads.s3m"))+"\"+f.Name;
Append(hhh);
writeln(hhh,s1,memo1.text,s2);
closefile(hhh);
break;//после записи прерываем поиск
end
//если не найдено такого файла, то создаем пустой файл
else
begin
h:=random(231);
filecreate(extractfiledir(expandfilename("ads.s3m"))+"\"+inttostr(h)+".htm");
end;
until FindNext(f)<>0;
FindClose(f);
end;


 
Anatoly Podgoretsky ©   (2007-08-25 22:58) [1]

> Bad_B  (25.08.2007 22:53:00)  [0]

ShowMessage(extractfiledir(expandfilename("ads.s3m")));


 
Bad_B   (2007-08-25 23:18) [2]


> Anatoly Podgoretsky ©   (25.08.07 22:58) [1]

ShowMessage(extractfiledir(expandfilename("ads.s3m")))  показывает "D:\web\raz\dot", а мне нужно "D:\web\raz\dot\*.htm"
поэтому я ж и написал в коде
extractfiledir(expandfilename("ads.s3m"))+"\*.htm"

или я что не понял?


 
Anatoly Podgoretsky ©   (2007-08-25 23:24) [3]

> Bad_B  (25.08.2007 23:18:02)  [2]

То есть ты это и хотел и тебя не смущает, что этот путь может быть разным?
Зависит от погоды на марсе.


 
Anatoly Podgoretsky ©   (2007-08-25 23:28) [4]

Инвариант extractfiledir(expandfilename("ads.s3m")) можно и нужно вынести за пределы цикла


 
Германн ©   (2007-08-26 01:08) [5]


> Bad_B   (25.08.07 22:53)

...

> //задаем путь где искать и что искать
> if FindFirst(extractfiledir(expandfilename("ads.s3m"))+"\*.
> htm",faAnyFile,f)=0 then
>

"Что искать" тут задано. А вот "Где искать" - тут полный бред.


 
Bad_B   (2007-08-26 01:18) [6]


> Германн ©   (26.08.07 01:08) [5]

так подскажите как сделать не бред?

ЗЫ. на примитиве завис...


 
Германн ©   (2007-08-26 01:57) [7]


> Bad_B   (26.08.07 01:18) [6]
>
>
> > Германн ©   (26.08.07 01:08) [5]
>
> так подскажите как сделать не бред?
>

Подскажу, если объяснишь "где ты хочешь искать"?


 
Bad_B   (2007-08-26 02:31) [8]


> Германн ©   (26.08.07 01:57) [7]

сейчас попробую еще разок подробно описать что и как (может и сам соображу)

В общем по такому пути "D:\web\raz\dot\" находятся различные htm файлы и файлы других форматов. Мне надо найти все htm, удовлетворяющие условию(д.б. меньше 1,5 кб). Я это делаю так
(чуток переписал код от первонального):

procedure tform1.proverka;
var
h,k,uuu:integer;
f:Tsearchrec;
begin
uuu:=0;
if FindFirst("*.htm",faAnyFile,f)=0 then
repeat
//if f.size<=1500 then
begin
form1.sg1.Cells[0,form1.sg1.RowCount-1]:=ExpandFileName(f.name);
form1.sg1.Cells[1,form1.sg1.RowCount-1]:=inttostr(f.size);
memo1.Lines.Add(ExpandFileName(f.name));
sg1.RowCount:=sg1.RowCount+1;
end;
until FindNext(f)<>0;
FindClose(f);


Затем я определяю какие файлы нужны (файлы менее 1,5 кб) через такую вот одновременную проверку:

//проверил размер, если меньше значит удовлетворяет и в соседней ячейке грида пишу тру, иначе ложь
for k:=1 to sg1.RowCount-1 do
if strtoint(sg1.Cells[1,k])<1500 then
sg1.Cells[2,k]:="True"
else
sg1.Cells[2,k]:="False";
//считаю сколько набралось тру
for k:=1 to sg1.RowCount-1 do
if sg1.Cells[2,k]="True" then
inc(uuu);
//если нет ни одного тру, то создаю файл
if uuu=0 then
begin
h:=random(231);
filecreate(extractfiledir(expandfilename(f.Name))+"\"+inttostr(h)+".htm");
end;end;


Записываю в файл удовлетворяющий условию так:
procedure tform1.Zapis;
var
k:integer;
hhh:textfile;
begin
proverka;
for k:=1 to sg1.RowCount-1 do
if (strtoint(sg1.Cells[1,k])<=1500)  then
begin
assignfile(hhh,sg1.Cells[0,k]);
Append(hhh);
writeln(hhh,s1,memo1.text,s2);
closefile(hhh);
end;
end;


По нажатию на кнопку вызываю zapis.
Все вроде как даже работает, и записывается в файл, и после его "наполнения" создается, да только на этом все и заканчивается, после создания файла уже 103 ошибка (не вожможно открыть файл) выбивает...

ЗЫ. знаю что проблема простейшая, но в упор не вижу(((


 
Германн ©   (2007-08-26 02:41) [9]


> Bad_B   (26.08.07 02:31) [8]
>
>
> > Германн ©   (26.08.07 01:57) [7]
>
> сейчас попробую еще разок подробно описать что и как (может
> и сам соображу)
>
> В общем по такому пути "D:\web\raz\dot\" находятся различные
> htm файлы

Вот по такому пути и ищи!


> Я это делаю так
> (чуток переписал код от первонального):
>
> procedure tform1.proverka;
> var
> h,k,uuu:integer;
> f:Tsearchrec;
> begin
> uuu:=0;
> if FindFirst("*.htm",faAnyFile,f)=0 then

А тут ты ищещь по пути заданному в CurrentDir :(


> filecreate(extractfiledir(expandfilename(f.Name))+"\"+inttostr(h)+".
> htm");

А тут ты опять уходишь незнамо куда.
Короче, прочитай хэлп по "expandfilename" и "CurrentDir". Внимательно. Будут вопросы, милости просим.


 
Bad_B   (2007-08-26 04:43) [10]


> Германн ©   (26.08.07 02:41) [9]

имхо, подоплека была в другом... "не смешивай функции работающие с файловыми переменными (write,assignfile) c функциями, работающими с дескрипторами (filecreate)..." видимо отсюда error#103


 
Loginov Dmitry ©   (2007-08-26 09:31) [11]

filecreate после создания файла держит его открытым. Для закрытия нужно использовать CloseHandle.


> имхо, подоплека была в другом... "не смешивай функции работающие
> с файловыми переменными (write,assignfile) c функциями,
> работающими с дескрипторами (filecreate)..." видимо отсюда
> error#103


скорее ошибка он неполного понимания того, что делаешь.


 
Anatoly Podgoretsky ©   (2007-08-26 12:50) [12]

const
  RootPath = "D:\web\raz\dot\"

И используешь везде, а не дурдом под названием expand, работу которого ты не понимаешь.
Можешь и явно указывать в каждом месте, но это не удобно, особенно если его надо сменить при разработке.


 
Bad_B   (2007-08-26 16:30) [13]

Сорри за навязчивсть, но надо таки разобраться до конца, что б не задавать таких вопросов.

> Loginov Dmitry ©   (26.08.07 09:31) [11]


h:=random(23);
put:="D:\web\raz\dot\"+inttostr(h)+".htm";
filecreate(put);
fileclose(filecreate(put));

все равно не закрывает, или я не так делаю?


> Anatoly Podgoretsky ©   (26.08.07 12:50) [12]

Непременно воспользуюсь советом, но extractfiledir(expandfilename("ads.s3m"))+"\*.htm" тоже дает верный результат. где не верно-то?

ЗЫ. не бейте ногами, как могу пытаюсь разобраться


 
Anatoly Podgoretsky ©   (2007-08-26 17:34) [14]

Верный в виде кучи пустых файлов


 
Bad_B   (2007-08-26 17:59) [15]

Я так понимаю expandfilename("ads.s3m")) дает полный путь к файлу, т.е.
"D:\web\raz\dot\ads.s3m", а extractfiledir(expandfilename("ads.s3m")) обрезает путь до такого вида "D:\web\raz\dot".

Разве это влияет на создание пустых файлов? Даже если это так, то во втором предложенном варианте, выдает ошибку 103. Т.е. я так понимаю после создания файла filecreate, assignfile не может получить доспут к файлу, т.к. он не закрыт еще. Создаю и закрываю к указал выше
h:=random(23);
put:="D:\web\raz\dot\"+inttostr(h)+".htm";
filecreate(put);
fileclose(filecreate(put));

, но ошибка все-равно есть. Что ж не так?


 
Anatoly Podgoretsky ©   (2007-08-26 18:16) [16]

Поводу пустых файлов - если тебя это не интересовало, то зачем задавал вопрос?

Смешно на два открытия одно закрытие.


 
sniknik ©   (2007-08-26 18:18) [17]

> Я так понимаю expandfilename("ads.s3m")) дает полный путь к файлу
а ты не понимай, а просто почитай справку. впрочем повторяюсь.

> Что ж не так?
возможно программирование это "не твое", и в этом все дело. (отсюда и игнорирование подсказок, и глупая уверенность в том "что проблема простейшая" при полном ее не понимании (с чего бы? если не можеш значит для тебя это не просто))


 
Bad_B   (2007-08-26 19:00) [18]


> sniknik ©   (26.08.07 18:18) [17]


> а ты не понимай, а просто почитай справку

из справки (русик) для Д5 "ExpandFileName Возвращает полный путь и имя файла FileName." Так?


> возможно программирование это "не твое", и в этом все дело.

зацепил этим)) +1...

Рабочий вариант(о каких то улучшениях даже боюсь заикаться, забьете:-))

procedure TForm1.Button1Click(Sender: TObject);
var
FileHandle,uuu:integer;
put:string;
hhh:textfile;
f:Tsearchrec;
begin
randomize;
uuu:=0;
if FindFirst("D:\web\razl\dot\*.htm",faAnyFile,f)=0 then
repeat
if f.size<=1500 then
begin
form1.sg1.Cells[0,form1.sg1.RowCount-1]:=ExpandFileName(f.name);
form1.sg1.Cells[1,form1.sg1.RowCount-1]:=inttostr(f.size);
memo1.Lines.Add(ExpandFileName(f.name));
sg1.RowCount:=sg1.RowCount+1;
inc(uuu);
end;
until FindNext(f)<>0;
FindClose(f);
sg1.RowCount:=sg1.RowCount-1;
if (uuu<>0) and (FileExists(sg1.Cells[0,1])) then
begin
assignfile(hhh,sg1.Cells[0,1]);
{$I-}
append(hhh);
{$I+}
if IOresult=0 then
writeln(hhh,memo1.text);
closefile(hhh);
end
else
begin
showmessage("all");
sg1.RowCount:=sg1.RowCount+1;
FileHandle:= filecreate(extractfiledir(ExpandFileName(f.Name))+"\"+inttostr(random(23))+".htm");
showmessage(inttostr(FileHandle));
FileClose( FileHandle);
end;
end;


 
sniknik ©   (2007-08-26 19:09) [19]

> из справки (русик) для Д5 "ExpandFileName Возвращает полный путь и имя файла FileName." Так?
какой путь? про текущий тебе уже "намекали", если именно он и нужен то можно получить его проще, одной функцией. но с чего ты взял что это будет "D:\web\raz\dot" (нужный тебе)?

> Рабочий вариант(о каких то улучшениях даже боюсь заикаться, забьете:-))
и что он делает? т.е. вернее что ты от него хочеш? и о каких улучшениях можно заикаться если неведомо зачем это нужно. код он не самоочевиден.


 
Bad_B   (2007-08-26 19:24) [20]


> sniknik ©   (26.08.07 19:09) [19]


> про текущий тебе уже "намекали",

Это?
const
 RootPath = "D:\web\raz\dot\"

да, исправлю.

> но с чего ты взял что это будет "D:\web\raz\dot" (нужный
> тебе)?

а каким он еще может быть? если я однозначно определил где искать FindFirst("D:\web\razl\dot\*.htm",faAnyFile,f)
а потом также однозначно где нужно его создать extractfiledir(ExpandFileName(f.Name)). Или это неправильно?

> и что он делает?

Делает он то что я хотел: ищет по пути "D:\web\raz\dot\" все файлы *.htm, затем если файл меньше 1,5кб, то записывает в него инфу из мемо, если таких файлов нет, то создает пустой файл, который будет "заполнен".


 
Anatoly Podgoretsky ©   (2007-08-26 19:38) [21]

> Bad_B  (26.08.2007 19:00:18)  [18]

Зачем в одной процедуре файлы Паскаля и низкоуровневые файлы.


 
Bad_B   (2007-08-26 19:59) [22]


> Anatoly Podgoretsky ©   (26.08.07 19:38) [21]

Так показалось проще реализовать.
Или так нельзя (не желательно) делать? Если не сложно пару слов об этом.


 
sniknik ©   (2007-08-26 20:05) [23]

> Или это неправильно?
да откуда я знаю правильно это или нет? ты переоцениваешь мои телепатические таланты...
если пут заданный в FindFirst и есть текущий, и если именно это тебе и нужно то тогда правильно, если пути различны то нет. с чего ты вообще решил что параметр из FindFirst както влияет на ExpandFileName? разве в хелпе это написано?

> Делает он то что я хотел: ищет по пути "D:\web\raz\dot\"
все. неправильно. вообще возможна правильная работа при совпадении условий но не более.

и это не полностью раскрытое условие "что он делает", в коде присутствуют какието странные "артефакты" (randomize, form1.sg1.Cells, sg1.RowCount ...) которые для озвученного "Делает он то ... " как собаке пятая нога, а значит либо нужно их выкинуть либо доозвучить условие "что он делает".


 
Bad_B   (2007-08-26 20:31) [24]


> sniknik ©   (26.08.07 20:05) [23]


> параметр из FindFirst както влияет на ExpandFileName

получается что влияет. Ведь взависимости от того какой файл (имя) найдет FindFirst в тот файл и записываются данные.


> все. неправильно.

нет, конечно надо первоначально учитывать а существует ли подобный путь на машине, иначе будут ошибки. Такой путь (т.е. условие о которым вы говорите) существует всегда.


> либо доозвучить

procedure TForm1.Button1Click(Sender: TObject);
var
FileHandle,uuu:integer;
put:string;
hhh:textfile;
f:Tsearchrec;
begin
//для генерации всегда случайных чисел используем, хотя целесообразно перенести в FormCreate, но пока этого не делаю,
randomize;
uuu:=0;
//ищем файлы в папке "D:\web\razl\dot\" все файлы *.htm
if FindFirst("D:\web\razl\dot\*.htm",faAnyFile,f)=0 then
repeat
//если размер файла менее или равен 1,5кб, то
if f.size<=1500 then
begin
//записываем в stringgrid, у меня он переименован в sg1, полный путь к файлу и в соседнюю колонку размер этого файла
form1.sg1.Cells[0,form1.sg1.RowCount-1]:=ExpandFileName(f.name);
form1.sg1.Cells[1,form1.sg1.RowCount-1]:=inttostr(f.size);
memo1.Lines.Add(ExpandFileName(f.name));
//увеличиваем количество строк в sg1 на одну, если удовлетворяющих файлов не один
sg1.RowCount:=sg1.RowCount+1;
//считаем количество удовлеторяющих файлов
inc(uuu);
end;
until FindNext(f)<>0;
// освобождаем память, выделенную процедурой FindFirst
FindClose(f);
//уменьшаем количество строк, что при отображении в sg1, последняя строка не была пустой
sg1.RowCount:=sg1.RowCount-1;
//если количество удовлетворяющих файлов не равно нулю, т.е. сработало inc(uuu), и файл существует файл, путь к которому записан в первой строке sg1, то осуществляем запись в этот файл
if (uuu<>0) and (FileExists(sg1.Cells[0,1])) then
begin
assignfile(hhh,sg1.Cells[0,1]);
{$I-}
append(hhh);
{$I+}
if IOresult=0 then
writeln(hhh,memo1.text);
closefile(hhh);
end
else
begin
//если нет файлов удовлетворяющих условию (>= 1500), то создаем пустой файл
showmessage("all");
sg1.RowCount:=sg1.RowCount+1;
FileHandle:= filecreate(extractfiledir(ExpandFileName(f.Name))+"\"+inttostr(random(23))+".htm");
showmessage(inttostr(FileHandle));
FileClose( FileHandle);
end;
end;
Так хоть немного понятнее стало, что я хочу сделать, что сделал и как? И все ли правильно сделал?


 
sniknik ©   (2007-08-26 20:51) [25]

> получается что влияет.
получается ты не слушаешь ответов, зачем спрашиваешь тогда?

> Ведь взависимости от того какой файл (имя) найдет FindFirst в тот файл и записываются данные.
условие совпало, но так будет не всегда.

> Такой путь (т.е. условие о которым вы говорите) существует всегда.
не перевирай, я говорил не об условии существования пути, а об условии совпадения его с текущим.

> Так хоть немного понятнее стало, что я хочу сделать, что сделал и как?
а то. понятно, что ты надергал откудато (вероятно из ответов тебе) куски разного по стилям кода даже не особо понимая что он делает. и до сих пор отказываясь понимать.

> И все ли правильно сделал?
шутишь? при указанных явных ошибках, др. "мелочах" (1,5кб это не 1500б например), и таком неряшливом коде? надо переписывать. однозначно.


 
Bad_B   (2007-08-26 21:13) [26]

//оффтопный пост


> условие совпало, но так будет не всегда.

почему не всегда? если 100% есть уверенность что такой путь существует и совпадает с текущим. Такая уверенность, потому что заранее создается на машине.


> ты надергал откудато (вероятно из ответов тебе) куски разного
> по стилям

обычно ставят имхо когда так говорят, или я не правильно прокомментировал свой код? да, не отрицаю, что пользовался советами, но ведь не строчки кода мне запостили (ну, не считая const RootPath "D:\web\raz\dot\"), писал самостоятельно... хотя, думайте что хотите, это ваше право...

Если не затруднит (понимаю, если лень или просто нет времени) покажите как надо?


 
@!!ex ©   (2007-08-26 21:38) [27]

оффтоп
> обычно ставят имхо когда так говорят, или я не правильно
> прокомментировал свой код? да, не отрицаю, что пользовался
> советами, но ведь не строчки кода мне запостили (ну, не
> считая const RootPath "D:\web\raz\dot\"), писал самостоятельно...
> хотя, думайте что хотите, это ваше право...

Вообще то ИМХо в его комментах присутствует.
Лично для меня слова "видимо" и ИМХО, практически синонимы, а для вас?


 
tmp   (2007-08-26 22:31) [28]


> Bad_B   (26.08.07 20:31) [24]


Ужасный код.

Вот стандартный пример поиска файлов. Разберись хорошо с этим примером и, если всё правильно поймёшь, то сможешь правильно реализовать свою идею.

Процедура находит файлы определённые маской - Mask в заданном каталоге - Directory и, возможно, в подкаталогах(в зависимости от WithSubDirs) и добавляет их в List.


procedure GetFilesInDirectory(Directory: String; const Mask: String;
                             List: TStrings;
                             WithSubDirs, ClearList: Boolean);

procedure ScanDir(const Directory: String);
var
 SR: TSearchRec;
begin
 if FindFirst(Directory + Mask, faAnyFile and not faDirectory, SR) = 0 then try
   repeat
     List.Add(Directory + SR.Name)
   until FindNext(SR) <> 0;
 finally
   FindClose(SR);
 end;

 if WithSubDirs then begin
   if FindFirst(Directory + "*.*", faAnyFile, SR) = 0 then try
     repeat
       if ((SR.attr and faDirectory) = faDirectory) and
          (SR.Name <> ".") and (SR.Name <> "..") then
         ScanDir(Directory + SR.Name + "\");
     until FindNext(SR) <> 0;
   finally
     FindClose(SR);
   end;
 end;
end;

begin
 List.BeginUpdate;
 try
   if ClearList then
     List.Clear;
   if Directory = "" then Exit;
   if Directory[Length(Directory)] <> "\" then
     Directory := Directory + "\";
   ScanDir(Directory);
 finally
   List.EndUpdate;
 end;
end;



 
sniknik ©   (2007-08-26 23:25) [29]

> Такая уверенность, потому что заранее создается на машине.
и юзеры тоже создаются? или им мозги промываются под "стандарт", и запускать программу они будут только так а не иначе, и ярлычков делать не будут/сделают как вам надо.
не понимаю, зачем спрашивал тогда? вам с самого начала твердят о бредовости кода
(а если именно и нужен, текущий, то почему явной функцией его не прочитать? зачем усложнение с запутыванием кода?)

> Если не затруднит (понимаю, если лень или просто нет времени) покажите как надо?
э нет... хоть мне сегодня и нечем заняться, но...
мы же обсуждаем
> Что я делаю не так?
а не "как сделать?/напишите за меня"
и потом для тебя же это просто
> ЗЫ. знаю что проблема простейшая, но в упор не вижу(((
типа как два пальца... так вперед!
так что батенька ты пишешь, а мы говорим что не так. и никак иначе.


 
Bad_B   (2007-08-26 23:38) [30]


> tmp   (26.08.07 22:31) [28]

спс, сейчас посмотрю


> sniknik ©   (26.08.07 23:25) [29]

ну, так я ж и не прошу-то код))... до попрошайничал - а терь и с этими "двумя пальцами", как видно, проблема...
я написал код - Вы сами сказали - "ужас! все переписать"...
я за два дня три раза переписываю... но постоянно где-то что-то не то...

чем код-то ужасен? не надо свой код писать, просто прокомментируйте мой, что правильно, что нет.

ЗЫ. ...надо в этом основательно разобраться, раз и навсегда!...


 
Anatoly Podgoretsky ©   (2007-08-26 23:41) [31]

> Bad_B  (26.08.2007 23:38:30)  [30]

То что переписываешь видно, но также видно что к советам не прислушиваешься, только частично.


 
tmp   (2007-08-26 23:46) [32]


> Bad_B   (26.08.07 23:38) [30]
> чем код-то ужасен? не надо свой код писать, просто прокомментируйте
> мой, что правильно, что нет.


А что комментировать? Если "ужас! все переписать"...
Вобще алгоритм не хороший. Это я так думаю - может по твоему и нормально.


 
Bad_B   (2007-08-27 02:53) [33]

Опираясь на tmp   (26.08.07 22:31) [28] вот что получил:
procedure GetFilesInDirectory(Directory: String; const Mask: String;
                            List: TStrings;
                            WithSubDirs, ClearList: Boolean;text:string);

procedure ScanDir(const Directory: String);
var
SR: TSearchRec;
FileHandle:integer;
//это для создания нового файла
procedure Checker(NewFile:string);
begin
if sr.Size>= 1500 then
begin
FileHandle:=filecreate(Directory+inttostr(random(3))+".htm");
FileClose(FileHandle);
ScanDir(Directory);
end;
end;
//для добавления текста
procedure EdText(fileName:string);
 var
 hhh:textfile;
 begin
 filename:=directory+sr.name;
 assignfile(hhh,filename);
 append(hhh);
 writeln(hhh,text);
 closefile(hhh);
 exit;
 end;

begin
if FindFirst(Directory + Mask, faAnyFile and not faDirectory, SR) = 0 then
try
  repeat
// добавил условие     if SR.Size<=1500 then
    begin
    List.Add(Directory + SR.Name);
    edtext(Directory + SR.Name);
    exit;
    end;
  until FindNext(SR) <> 0;
finally
  begin
  FindClose(SR);
  checker(Directory);
  end;
end;
//проверка в подкаталогах в принципе не нужна, но пока убирать не буду
if WithSubDirs then begin
  if FindFirst(Directory + "*.*", faAnyFile, SR) = 0 then try
    repeat
      if ((SR.attr and faDirectory) = faDirectory) and
         (SR.Name <> ".") and (SR.Name <> "..") and (SR.Size<=1500) then
        begin
        ScanDir(Directory + SR.Name + "\");
        end;
    until FindNext(SR) <> 0;
  finally
    FindClose(SR);
  end;
end;
end;

begin
List.BeginUpdate;
try
  if ClearList then
    List.Clear;
  if Directory = "" then Exit;
  if Directory[Length(Directory)] <> "\" then
    Directory := Directory + "\";
  ScanDir(Directory);
finally
  List.EndUpdate;
end;
end;


вызываю так
GetFilesInDirectory(edit1.Text,"*.htm",memo1.Lines,false,true,memo2.Text);
в edit1.Text пишу путь к файлам, потом задаю маску ("*.htm"), в мемо1 выводим полный путь к файлу, проверка в подкаталогах не нужна пока, поэтому false, list очищаем каждый(имхо, полезно для логов поставить false), и мемо2.техт - текст который будет записываться в файл. Целесообразно будет сделать уникальное имя для создаваемого файла, в противном случае (при рандом(3), например) он перезаписывается.

А сейчас что скажете? Что еще исправить, подправить?



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

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

Наверх





Память: 0.57 MB
Время: 0.042 c
15-1187077053
Жук
2007-08-14 11:37
2007.09.16
Железо для 1С:Бухгалтерия 8.1


8-1165527388
AndreyRu
2006-12-08 00:36
2007.09.16
Antialiasing Глифов!


15-1187730447
Германн
2007-08-22 01:07
2007.09.16
Обидный пробел в функциональности IDE Delphi (Д6)


15-1187530512
ArtemESC
2007-08-19 17:35
2007.09.16
Шахматная программа


15-1187364665
isasa
2007-08-17 19:31
2007.09.16
Ищу работу в Киеве (Delphi, вроде знаю)





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