szukanie pliku

0

Mam taki kod:

procedure TForm1.Button1Click(Sender: TObject);
var
Search : TSearchRec;
FileAttrs: Integer;

begin

FileAttrs := faAnyFile; // wszystkie pliki oprocz katalogow;

if FindFirst('plik.txt', FileAttrs, Search) = 0 then
repeat
Memo1.Lines.Add(Search.Name);
until FindNext(Search) 0;

FindClose(Search);
end;

end.

Wszystko sie kompiluje tylko w tym problem ze na dysku c mam umieszczony plik plik.txt a i tak nie wsyszukuje tych plikow i nie wkleja do mmeo co jest zle??

0

szuka Ci pliku w bierzącym katalogu a nie jest on równy c:, tylko innemu katalogowi domyślnym jest katalog profilu użytkownika

<font color="red">[TO JEST DLA TROJANA]</span>

0

to nic nie ejst dla trojana tylko poprosty chce sie nauczyc cos wiecej wiec co mam zle ze szuka co mam poprawic??

0

dodac sciezke do 'plik.txt'

odpwiedz do tego co nizej nie, przy czym bedzie chodzic jak zrozumiesz jak to działa i usuniesz kruczek

function szukajpliku(dir,nazwa : String) : String;
var
Fi : TSearchRec;
attr : Word;
eSearch : Integer;
fileName : string;
begin
result := '';
Attr := faArchive+ faDirectory;
Attr := Attr + faHidden + faSysFile; // szuka wszystich plikow
eSearch := FindFirst(Dir + FMaskFile,attr,Fi);
While eSearch = 0 do
begin
FileName := Fi.Name;
if (FileName[1] '.') then
begin
if ((fi.attr and faDirectory) faDirectory ) then
if filename = nazwa then
begin
result := dir +'' +filename;
break
end
else
begin
result :=szukajpliku(dir+''+ filename,nazwa);
if result '' then
break;
end;

  eSearch := FindNext(Fi);
end;
FindClose(Fi);

end;
end;

0

A jak zrobic by szukalo wszedzie w katalogach na dysku C nie tylko tam gdzie podam sciezke dostepu??Prosze o jakis prosty kod

0

unit MainFrm;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, FileCtrl, ComCtrls, ImgList, ShellAPI, Buttons;

type
TMainForm = class(TForm)
DirBox: TDirectoryListBox;
edtMask: TEdit;
lblMask: TLabel;
btnFind: TButton;
lblFoundResults: TLabel;
lbFileBox: TListView;
ImageList: TImageList;
procedure btnFindClick(Sender: TObject);
procedure lbFileBoxDblClick(Sender: TObject);
private
procedure Search(const StartDir : String; Ext : String);
end;

var
MainForm: TMainForm;

implementation

{$R *.dfm}

procedure TMainForm.Search(const StartDir : String; Ext : String);
var
SR, DR : TSearchRec;
Found, FoundFile : Integer;
ListItem : TListItem;
Icon : TIcon;
ExtNo : Word;

function IsDir(Value : String) : String;
begin
if Value[Length(Value)] '' then
Result := Value + '' else Result := Value;
end;

begin
Icon := TIcon.Create;
Found := FindFirst(IsDir(StartDir) + '.', faDirectory, DR);
while Found = 0 do
begin
Application.ProcessMessages;
if ((DR.Attr and faDirectory) = faDirectory) and
((DR.Name '.') and (DR.Name '..')) then
begin

  FoundFile := FindFirst(IsDir(StartDir) + DR.Name + '' + Ext, faAnyFile, SR);
  while FoundFile = 0 do
  begin
    Application.ProcessMessages;
    if ((SR.Name  '.') and (SR.Name  '..')) then
    begin
      Icon.Handle := ExtractAssociatedIcon(hInstance, PCHar(IsDir(StartDir) + DR.Name + '' + SR.Name), ExtNO);

      ListItem := lbFileBox.Items.Add;
      ListItem.ImageIndex := ImageList.AddIcon(Icon);
      ListItem.Caption := IsDir(StartDir) + DR.Name + '' + SR.Name;
      ListItem.SubItems.Add(DateTimeToStr(FileDateToDateTime(SR.Time)));
      ListItem.SubItems.Add(IntToStr(SR.Size) + ' B');
    end;

    FoundFile := FindNext(SR);
  end;
  FindClose(SR);

  Search(IsDir(StartDir) + DR.Name, Ext);
end;
Found := FindNext(DR);

end;
FindClose(DR);
Icon.Free;
end;

procedure TMainForm.btnFindClick(Sender: TObject);
begin
lbFileBox.Clear;
ImageList.Clear;
lbFileBox.Items.BeginUpdate;
btnFind.Enabled := False;
Search(DirBox.Directory, edtMask.Text);
btnFind.Enabled := True;
lblFoundResults.Caption := 'Rezultaty poszukiwań: ' + IntToStr(lbFileBox.Items.Count) + ' znalezionych plików...';
lblFoundResults.Visible := True;
lbFileBox.Items.EndUpdate;
end;

procedure TMainForm.lbFileBoxDblClick(Sender: TObject);
begin
ShellExecute(Handle, 'open', PCHar(lbFileBox.Selected.Caption), nil, nil, SW_SHOW);
end;

end.

0

Mam tak kod:

procedure TForm1.Button1Click(Sender: TObject);
var
Search : TSearchRec;
FileAttrs: Integer;

begin

FileAttrs := faDirectory; // wszystkie pliki oprocz katalogow;

if FindFirst('plik.txt', faDirectory, Search) = 0 then
repeat
Memo1.Lines.Add(Search.Name);
until FindNext(Search) 0;

FindClose(Search);
end;

end.

0

o ja nie moge. ROTFLOL24+(21024)*1024+LOL

faDirectory znaczy tylko katalogi, poza tym DR zamień na Search bo tak się nazywa odpowiednia zmienna. więcej o tym w helpie delphi. polecam lekture

0

Teraz kod wyglada tak:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;

type
TForm1 = class(TForm)
ListView1: TListView;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
procedure FindFiles(Dir: String; Mask: String);
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
procedure TForm1.FindFiles(Dir, Mask: String);
var
SR : TSearchRec; // rekord
List : TListItem; // pozycja w ListView
Found : Integer; // zmienna oznacza ilosc znalezionych plikow
I : WORD;
Icon : TIcon; // ikona
begin
I := 0;

// wyciagniecie ikony

Found := FindFirst(Dir + '' + Mask, faAnyFile, SR ); // odnajdź pliki
while ( Found = 0 ) do // rob dopoki liczba zbalezionych plikow nie rowna sie zero
begin
List := ListView1.Items.Add; // stworz nowa pozycje
List.Caption := Dir + '' + SR.Name; // ustaw pozycje
List.SubItems.Add(IntToStr(SR.Size) + ' bajtów'); // dodaj rozmiar pliku
Found := FindNext(SR); // kontynuuj przeszukiwanie
end;

FindClose(SR); // zkaoncz przeszukiwanie

end;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
FindFiles('c:','plik.txt');
end;

end.

Ale i tak tylko szuka pliku z katalogu z dysku C:\ a zeby juz weszlo w inne i szukalo to juz nie szuka jak zrobic by szukalo prosze o pomoc z gory dziekuje

0

Zrob rekurencyjnie: zrob procedure szukajaca z katalogiem jako parametrem. Wewnatrz procedury przegladasz i jak napotkasz katalog to wywolujesz rekurencyjnie ta sama procedure z podkatalogiem jako parametrem. Jak chcesz, to wejdz na moja stronke, sciagnij zrodla programu Updater i przeanalizuj.

0

Prosze niech ktos mi poda kod bo juz szukam w faq w roznych zrodlach itd i se nie radze plis

0

Aggrr, przecież na gg podałem Ci link :-[.
[code] http://www.google.pl/search?hl=pl&ie=UTF-8&oe=UTF-8&q=search+file+disk+delphi&lr=
|
+-> http://www.awitness.org/delphi_pascal_tutorial/source/disk_search_recursive.html[/code]"

The following function demonstrates a simple method to search a disk drive and all subdirectories using a recursive method.
"

[<font color="blue">dopisane</span>]
A ponieważ lecisz sobie w kulki - spamujesz gdzie się da tym wątkiem oraz tworzysz po kilka takich samych pytań jedno pod drugim - temat blokuję. Myślę, że tylko na tym straciłeś, bo ludzie już nie będą tak chętni do pomocy Tobie. - m.M

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.