Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.04.2009, 18:35
Аватар для Sharky
Sharky Sharky вне форума
Активный
 
Регистрация: 20.03.2007
Сообщения: 202
Репутация: 10
По умолчанию обработка поиска файлов

Всем привет
вообщем вот что:
Ищю я директории в какой то папке и добавляю найденные имена папок в массив строк . Первые два элемента у меня равны '.' и '..' ну я знаю что это родительский каталог .Так вот суть проблемы: я пытаюсь не записывать эти строки в мой массив
вот как я это делаю
Код:
procedure findDirList(Path:Pchar; var list:TStringli
var
 c:char;
 F : TSearchRec;
 i:integer;
begin
 findfirst(Path,faDirectory,F);
 i:=1;
 if (F.name <> '.')  and ( F.name <> '..')
 then
 List[i]:=f.name;
 repeat
  if list[i]<>list[i-1] then
   begin
    FindNext(F);
    if (F.name <> '.') and ( F.name <>'..') then
    List[i+1]:=F.name;
    inc(i);
   end
  else
  break
....
Вообщем всё равно записываются в 1 и 2 элементы точки
я уж и засекал номер символа через орд и зажав альт писал в условии но не пашет все равно
Прогу пишу я на турбо паскале

Последний раз редактировалось Sharky, 25.04.2009 в 17:33.
Ответить с цитированием
  #2  
Старый 24.04.2009, 20:03
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

Пробовала так:
Код:
procedure findDirList(const Path: string; var list: TStringList);
var
  F: TSearchRec;
begin
  if FindFirst(Path, faAnyFile, F) <> 0 then Exit;
  list.Clear;
  if (F.Name <> '.') and ( F.Name <> '..') then
    if (F.Attr and faDirectory) <> 0 then list.Add(F.Name);

  try
    while FindNext(F) = 0 do
      if (F.Name <> '.') and ( F.Name <> '..') then
        if (F.Attr and faDirectory) <> 0 then list.Add(F.Name);
  finally
    FindClose(F);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  SList: TStringList;
begin
  SList := TStringList.Create;
  try
    findDirList(Edit1.Text, SList);
    Memo1.Lines.Clear;
    Memo1.Lines.AddStrings(SList);
  finally
    SList.Free;
  end;
end;
Вроде, нету никаких точек на выходе...

P.S. Ай, забыла, что на Pascal пишите! Ну да ладно, это не меняет сути...
Ответить с цитированием
  #3  
Старый 24.04.2009, 20:09
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Честно говоря, не понял зачем такие сложности.
Ну и функцию, наверное, ты не совсем правильно используешь.
На дельфях это будет выглядеть так:
Код:
var 
  I : Integer;
  F : TSearchRect;
  iFound : Integer;
begin
  I := 0;
  iFound := FindFirst(Path,faAnyFile,F);
  While iFound = 0 Do
    Begin
       If ((F.Attr And faDirectory) <> 0) And 
          (F.Name <> '.') And
          (F.Name <> '..') Then
         Begin
           Inc(I);
           List[i] := F.Name;
         End;
       iFound := FindNext(F);
    End;
  FindClose(F);
Ответить с цитированием
  #4  
Старый 24.04.2009, 22:48
Аватар для Sharky
Sharky Sharky вне форума
Активный
 
Регистрация: 20.03.2007
Сообщения: 202
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Честно говоря, не понял зачем такие сложности.
Ну и функцию, наверное, ты не совсем правильно используешь.
На дельфях это будет выглядеть так:
Код:
var 
  I : Integer;
  F : TSearchRect;
  iFound : Integer;
begin
  I := 0;
  iFound := FindFirst(Path,faAnyFile,F);
  While iFound = 0 Do
    Begin
       If ((F.Attr And faDirectory) <> 0) And 
          (F.Name <> '.') And
          (F.Name <> '..') Then
         Begin
           Inc(I);
           List[i] := F.Name;
         End;
       iFound := FindNext(F);
    End;
  FindClose(F);
яж на турбо паскале пишу и там у меня
type
TsringList= array [1..255] of string;
Ответить с цитированием
  #5  
Старый 24.04.2009, 22:52
Аватар для Sharky
Sharky Sharky вне форума
Активный
 
Регистрация: 20.03.2007
Сообщения: 202
Репутация: 10
По умолчанию

И ваще с какой стати мой код не работает
написано же ведь
Код:
 
if (F.name <> '.')  and ( F.name <> '..')
 then
 List[i]:=f.name;
в слечае 1 или 2 точек не производить запись в масссив а турбо среде по
Вот почему????
Ответить с цитированием
  #6  
Старый 24.04.2009, 23:53
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Sharky
И ваще с какой стати мой код не работает
написано же ведь
Код:
 
if (F.name <> '.')  and ( F.name <> '..')
 then
 List[i]:=f.name;
в слечае 1 или 2 точек не производить запись в масссив а турбо среде по
Вот почему????

Попробуй как я написал, все-таки. Там у тебя какая-то муть в 3 захода...
Ответить с цитированием
  #7  
Старый 24.04.2009, 23:53
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Sharky
яж на турбо паскале пишу и там у меня
type
TsringList= array [1..255] of string;

Ну а я чего написал?
Я понял, что это у тебя массив.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:24.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025